相关疑难解决方法(0)

为什么不将python嵌套函数称为闭包?

我已经在Python中看到并使用了嵌套函数,它们与闭包的定义相匹配.那他们为什么叫nested functions而不是closures

嵌套函数是不是闭包,因为它们不被外部世界使用?

更新:我正在阅读关于闭包的内容,这让我想到了关于Python的这个概念.我在下面的评论中搜索并找到了某人提到的文章,但我无法完全理解该文章中的解释,所以这就是我提出这个问题的原因.

python closures nested-function

234
推荐指数
6
解决办法
9万
查看次数

"关闭是穷人的对象,反之亦然" - 这是什么意思?

闭包是穷人的对象,反之亦然.

我已经看到这个声明 许多 地方网站(上包括SO),但我不太明白是什么意思.有人可以解释它究竟意味着什么吗?

如果可能,请在答案中包含示例.

oop closures functional-programming object

57
推荐指数
6
解决办法
1万
查看次数

如何实现闭包?

"学习Python,第四版." 提到:

稍后调用嵌套函数时会查找封闭的范围变量.

但是,我认为当一个函数退出时,它的所有本地引用都会消失.

def makeActions():
    acts = []
    for i in range(5): # Tries to remember each i
        acts.append(lambda x: i ** x) # All remember same last i!
return acts
Run Code Online (Sandbox Code Playgroud)

makeActions()[n]每个人都是一样的,n因为变量i在调用时以某种方式查找.Python如何查找此变量?难道它根本不存在因为makeActions已经退出了吗?为什么Python不执行代码直观建议,并通过在循环运行时用for循环中的当前值替换i来定义每个函数?

从评论到THC4k:
我认为我错误地认为Python在内存中构建函数的方式.我在想,当遇到a makeActions()[n]或者a时n,Python会生成与该函数相关的所有必要的机器指令,并将其保存在内存中的某处.现在我认为它更像是将函数保存为文本字符串(并将其与闭包所需的引用捆绑在一起),并在每次调用函数时重新解析它.

python closures

21
推荐指数
2
解决办法
2205
查看次数

nonlocals()在哪里?

如何获取当前范围的非局部变量?功能vars,locals并且globals存在,但是有一个功能来获得nonlocals

调用时为什么不列出nonlocals vars

更新

我的问题是,有没有办法来枚举当前范围内都有效的变量,既不varsglobals包括非本地人AFAICT.

我经常使用vars如下代码:

'{meh[0]}/{meh[3]} {a}{b}{c}'.format(**vars())
Run Code Online (Sandbox Code Playgroud)

如果这些变量中的任何变量都在包含函数的范围内,则会失败.

python variables scope python-3.x python-nonlocal

4
推荐指数
1
解决办法
465
查看次数