2016-04-23 129 views
0

是這樣的:返回函數調用?

def outer(x): 
    def inner(): 
     print x 
    return inner 

>>> outer("foo")() 

與此相同:

def outer(x): 
    def inner(): 
     print x 
    return inner() 

>>> outer("foo") 

兩個工作,但有寫這樣的一個更Python的方式?

+3

他們做不同的事情。第一個返回一個函數,第二個返回'None'。返回函數的函數是具有一階函數的語言中的常用技巧。而裏面一個又一個的功能嚴格,以幫助外部函數(內部函數)也相當普遍 - 常常以防止命名空間膨脹或澄清程序功能/意圖。 – jedwards

+0

@wim,我的意見是不值得一*真正*的答案,但我很欣賞你的關心... – jedwards

回答

3

也不是絕對的術語「更Python」,因爲你會在不同情況下使用它們。

如果您生成的回調要在其他地方連線,關閉某些輸入(稍後將填寫其他輸入)或類似的高級用例,則返回稍後調用的函數是適當的。

返回一個值或立即執行副作用動作是適當的,如果你的聽衆將只關心該值或動作,和你沒有任何特別的理由操作拆分成階段。

0

他們是不同的。在你的例子中,第一個將返回一個函數,你可以稍後使用,第二個將返回None類型,因爲你什麼都沒有返回,只是打印x。