在另一个函数中调用一个函数后的新环境

时间:2019-10-26 15:48:27

标签: python

我有这个程序:

a = 0
def f(c):
    a = c
    return a + g(a)
def g(b):
    return a + b
f(3)                     #returns 6                                     

它如何返回值6?到目前为止,我知道当python解释器评估变量和过程时如何创建绑定环境。我也知道调用简单函数(在某种意义上它没有调用新函数)时如何创建新环境的细节。在f内调用g(a)之后,是否有一个专门为g创建的新环境,它比全局环境低一级,或者比f环境低一级?

1 个答案:

答案 0 :(得分:1)

与以下内容完全相同:

a = 0
def f(c):
    var = c
    return var + g(var)
def g(b):
    return a + b
f(3)

与以下相同:

def f(c):
    var = c
    return var + g(var)
def g(b):
    return 0 + b
f(3)

甚至更加简化:

def f(c):
    return c + g(c)
def g(b):
    return b
f(3)

仅读取全局变量的值时,可以在函数内使用它们。但是,如果尝试分配给全局变量,则需要使用global关键字,否则,请使用局部变量对全局变量进行阴影处理:

x= 123
def foo():
    x = 999   # shadows global x
    print(x)  # 999
print(x)      # 123


x = 123
def foo():
    global x
    x = 999   # changes global x
    print(x)  # 999
print(x)      # 999