我在PEP 8中找不到任何有關的內容。我對你對沒有任何回報的函數最pythonic語法的想法感興趣?功能最強大的pythonic方式沒有回報?
是否有任何理由阻止功能,而無需返回管線(例如3)?
實施例1:
def foo():
print 'foo'
return None
實施例2:
def foo():
print 'foo'
pass
實施例3:
def foo():
print 'foo'
我在PEP 8中找不到任何有關的內容。我對你對沒有任何回報的函數最pythonic語法的想法感興趣?功能最強大的pythonic方式沒有回報?
是否有任何理由阻止功能,而無需返回管線(例如3)?
實施例1:
def foo():
print 'foo'
return None
實施例2:
def foo():
print 'foo'
pass
實施例3:
def foo():
print 'foo'
如果函數返回一個值,這可能是None
一些情況下,return None
好。
如果函數沒有返回值,但要提前返回,使用return
不帶任何參數。在最後一行,你可以省略它。
pass
什麼也不做,而只有當需要聲明avoir語法錯誤有用的(在一個空的類,例如)
提及沒有價值的'return'。 – brandizzi
有兩個用例是:
return None
那裏,因爲否則可能會略有混淆讀者:例如:
def find_user(name):
if database.is_ready():
return database.find_user_by_name(name)
else:
return None
從技術上講,你可以刪除else
一部分,但它們將使得這個功能看起來很奇怪。
這是現在醜陋的做法,我從讀者的角度講話。沒有別的,只返回None! – Denis
+1給丹尼斯。 'else'是不必要的代碼。 – rantanplan
從執行的角度來看,這是不必要的,但它可以向讀者表明這個函數將返回None。數據庫沒有按照設計準備好,而且它不僅僅是作者忽略的東西。 – madjar
正如其他人指出方案3是目前最好的。
更多的原因選項3是一個好主意,許多人認爲None
(別的語言中的null
)一般不會返回,您應該拋出異常或使用Null對象模式。儘管我並不完全同意我認爲在語義上沒有意義且不明確的情況下,特別明確地避免使用None
有一些有效的觀點。
我不是說你不應該回到None
但總的來說,我不認爲這是一個好主意。
你甚至可以在Python中看到這個,blah['DOESNOTEXIST']
會拋出一個異常,其中Java map.get("DOESNOTEXIST")
將返回null
。
*很多人都認爲*這些人是誰?每個'__init__'都返回'None'。這就是它應該如何。這是一個非常有效且正常的回報值。在Python中也是'dict.get('doesntexit')'返回'None'。 – SilentGhost
很多人都是FP程序員。許多語言不具有null的概念。很多人都是託尼霍爾,他是空值的發明者:*我稱之爲我十億美元的錯誤。 1965年發明了空值參考。...但我無法抗拒放入空引用的誘惑,因爲它很容易實現。這導致了無數的錯誤,漏洞和系統崩潰,這可能在過去四十年中造成了數十億美元的痛苦和破壞。但是,Pythonic有時候會......絕對地返回「無」。 –
說真的......我因爲我說過避免使用null而沒有意義! 'dict.get('doesntexist')'是一個不好的例子。 你是否在地圖中綁定了'None'或者它不存在? Python中有許多因爲歷史原因而工作的東西,我討厭人們說它保持簡單。簡單是一個意見。 –
的PEP8了關於該議題的建議:
在return語句是一致的。 全部爲,函數返回語句應該返回一個表達式,或者無它們應該。如果任何return語句返回一個表達式,那麼沒有返回值的任何返回語句都應該明確聲明這是返回None,並且函數末尾應該有一個顯式的return語句(如果可以的話)。
是:
def foo(x):
if x >= 0:
return math.sqrt(x)
else:
return None
def bar(x):
if x < 0:
return None
return math.sqrt(x)
號:
def foo(x):
if x >= 0:
return math.sqrt(x)
def bar(x):
if x < 0:
return
return math.sqrt(x)
例3 ofcourse! – rantanplan
你不應該在這裏使用'pass'語句。來自doc:「當語句需要語法時可以使用,但程序不需要任何操作。」 – Nicolas
爲什麼你會使用前兩個? – TC1