我有这个程序:
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环境低一级?
答案 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