在python中创建闭包是否有一种首选样式?
创建闭包(编辑:“类似闭包的对象”)时,是首选这两种样式之一还是更“pythonic”在python中创建闭包是否有一种首选样式?,python,closures,Python,Closures,创建闭包(编辑:“类似闭包的对象”)时,是首选这两种样式之一还是更“pythonic” def make_doer(闭合变量): def doer(foo): pass#用closed_var和foo做点什么 回报实干家 类执行者: 定义初始值(自、闭合变量): self.\u closed\u var=closed\u var 定义调用(self,foo): 传球#用自己做点什么。(结束) 我能看出的唯一区别是前者稍微短一点,但第二种方法有一个优点,即结果函数的docstring(在第二种
def make_doer(闭合变量):
def doer(foo):
pass#用closed_var和foo做点什么
回报实干家
类执行者:
定义初始值(自、闭合变量):
self.\u closed\u var=closed\u var
定义调用(self,foo):
传球#用自己做点什么。(结束)
我能看出的唯一区别是前者稍微短一点,但第二种方法有一个优点,即结果函数的docstring(在第二种情况下为
\uuuuuu调用
)嵌套/隐藏较少。这两个似乎都不是什么大问题,还有什么能打破平衡的吗?闭包与维护对已通过的作用域或早期作用域中的对象的引用有关
以下是闭包形式的最简单示例:
def outer():
x=7
def inner(y):
return x + y
return inner
i = outer()
闭包必须维护对已传递的作用域或早期作用域中对象的引用 以下是闭包形式的最简单示例:
def outer():
x=7
def inner(y):
return x + y
return inner
i = outer()
第二个不是结束。这是一个有状态的类。在Python中,我们很富有,而且两者都有。严肃一点,你在创造两种不同的东西。在第一种情况下,
make_doer
返回函数对象,在第二种情况下,doer
返回doer
对象。您是正确的@juanpa.arrivillaga,更新为“closure like”:)第二种情况下不是闭包。这是一个有状态的类。在Python中,我们很富有,而且两者都有。严肃一点,你在创造两种不同的东西。在第一种情况下,make_doer
返回函数对象,在第二种情况下,doer
返回doer
对象。您是正确的@juanpa.arrivillaga,更新为“类似闭包”: