Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中创建闭包是否有一种首选样式?_Python_Closures - Fatal编程技术网

在python中创建闭包是否有一种首选样式?

在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(在第二种

创建闭包(编辑:“类似闭包的对象”)时,是首选这两种样式之一还是更“pythonic”

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,更新为“类似闭包”: