oli*_*ier 5 python variables scope
我很困惑 Python 什么时候计算变量。例如,如果我这样做:
p=4
def g():
return p
p=5
print g()
Run Code Online (Sandbox Code Playgroud)
我得到 5,所以在 的定义中g,变量p保持未计算。当我们调用时它被评估g
但是,如果我这样做:
def make_fun():
p=5
def f():
return p
return f
f=make_fun()
p=6
print f()
Run Code Online (Sandbox Code Playgroud)
我得到 5. 为什么不f包含未评估的变量p?我想清楚地了解变量的评估何时发生。
Python 在加载模块/脚本时执行代码。因此,在您的第一个示例中,它不是“在我们调用 g 时进行评估”,它仅表示p在g执行时的最新值为5 。Python 将查找p并返回当前值 (5)。
在你的第二个例子中p是一个局部变量。这意味着它不受p = 6全局范围内的影响。或者说清楚,第二个示例p中的f()in 是make_fun(). 所以这就是你会得到的值,它不是p在外部(全局)范围内,这是一个不同的p.