gpt4 book ai didi

python - 究竟什么会导致函数的 __code__.co_freevars 非空?

转载 作者:行者123 更新时间:2023-12-05 00:53:08 24 4
gpt4 key购买 nike

我预计以下结果会导致 y 成为自由变量:

def f(x):
return x + y

但是,f.__code__.co_freevars 等于 ()f.__code__.co_varnames 等于 (' x',),并且 f.__code__.co_names 等于 ('y',)

那么,究竟什么会导致使用变量填充 co_freevars

最佳答案

似乎 co_freevars 仅在存在闭包时才会填充,即在外部函数中定义内部函数。

模块级函数的 __closure__ 设置为 None,尽管访问的是非局部变量:

y = 1

def foo(x):
return x + y

print(foo.__closure__)
print(foo.__code__.co_freevars)

输出:

None
()

相对于:

def bar():
y = 1

def baz(x):
return x + y

print(baz.__closure__)
print(baz.__closure__[0].cell_contents)
print(baz.__code__.co_freevars)


bar()

输出:

(<cell at 0x7fa8fbbf0700: int object at 0x7fa8fbc7a930>,)
1
('y',)

关于python - 究竟什么会导致函数的 __code__.co_freevars 非空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68282302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com