2016-04-23 80 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。