【发布时间】:2017-12-03 16:45:33
【问题描述】:
我不太明白为什么代码
def f():
print(s)
s = "foo"
f()
运行得很好,但是
def f():
print(s)
s = "bar"
s = "foo"
f()
给我 UnboundLocalError。我知道我可以通过将 s 声明为函数内的全局变量或简单地将 s 一个参数传递给函数来解决此问题。
我仍然不明白 python 是如何在执行该行之前知道函数内部是否引用了 s 的?当函数被读入全局框架时,python是否会列出所有局部变量引用的列表?
【问题讨论】:
-
函数对象似乎知道所有这些东西。您可以使用
f.__code__进行检查。它具有co_nlocals、co_varnames等属性。
标签: python function global local