从文档:
程序文本中每次出现的名称指的是在包含使用的最内层功能块中建立的该名称的绑定。
这意味着除非您声明它global
或nonlocal
(嵌套函数) ,否则它myvar
是局部变量或自由变量(如果myvar
未在函数中定义)。
书不正确。在同一个块中,名称代表同一个变量(myvar
在您的示例中为局部变量,即使存在同名的全局变量,在定义它之前也不能使用它)。您也可以在函数之外更改值,即第 65 页末尾的文本也不正确。以下作品:
def funky(): # local
myvar = 20
print(myvar) # -> 20
myvar = 10 # global and/or local (outside funky())
funky()
print(myvar) # -> 10 (note: the same)
def funky(): # global
global myvar
print(myvar) # -> 10
myvar = 20
myvar = 10
funky()
print(myvar) # -> 20 (note: changed)
def funky(): # free (global if funky is not nested inside an outer function)
print(myvar) # -> 10
myvar = 10
funky()
def outer():
def funky(): # nonlocal
nonlocal myvar
print(myvar) # -> 5
myvar = 20
myvar = 5 # local
funky()
print(myvar) # -> 20 (note: changed)
outer()