当我们使用 for 循环创建函数时 - 它是闭包吗?

When we use a for loop to create functions - is it a closure?

提问人:alixi6 提问时间:10/24/2023 更新时间:10/24/2023 访问量:91

问:

我试图了解 Python 中的闭包概念。我见过很多这样的例子:

funcs = []
for n in range(1, 4):
    funcs.append(lambda x: x + n)

for f in funcs:
    print(f(1))

我明白为什么输出是:4 4 4

但我不明白的是,为什么这被称为闭合?闭包不应该是一个嵌套函数,可以访问封闭函数的变量吗?在这里,我们只是修改一个全局变量,它在最后一个周期后等于 3。n

此外,如果为函数分配变量

a = funcs[1]
print(a.__closure__)
print(a.__code__.co_freevars)

它返回

None
()

所以请告诉我,上面的代码是否创建闭包?我应该把它看作是闭包中的自由变量,还是只是一个全局变量?n

Python for-loop 闭包自由 变量

评论


答: 暂无答案