Python 何时计算函数定义中的变量

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?我想清楚地了解变量的评估何时发生。

Sim*_*ser 5

Python 在加载模块/脚本时执行代码。因此,在您的第一个示例中,它不是“在我们调用 g 时进行评估”,它仅表示pg执行时的最新值为5 。Python 将查找p并返回当前值 (5)。

在你的第二个例子中p是一个局部变量。这意味着它不受p = 6全局范围内的影响。或者说清楚,第二个示例p中的f()in 是make_fun(). 所以这就是你会得到的值,它不是p在外部(全局)范围内,这是一个不同的p.