第一种情况
def nb():
a+=1
print(a)
a=2
nb()
显示为错误
第二种情况
def nb():
global a
a+=1
print(a)
a=2
nb()
》》3
为什么第一种情况是错的呀
第一种情况
def nb():
a+=1
print(a)
a=2
nb()
显示为错误
第二种情况
def nb():
global a
a+=1
print(a)
a=2
nb()
》》3
为什么第一种情况是错的呀
因为a这个变量在nb()函数中不作为参数出现,而作为局部变量出现。
此时,无论是否存在全局变量a,只要nb()函数内部对未在函数内定义的变量a进行操作,python都会报错“UnboundLocalError: local variable 'a' referenced before assignment”。
而您第二次定义nb()函数时,在对变量a进行操作前进行声明,令解释器知道接下来函数内部操作的变量a是全局变量,就不会报错。
简单来说,在python里每一次定义函数,都类似于创建一个继承父环境部分特性的子环境,但它们使用的是两套变量:在大环境里定义的变量被称为全局变量,它适用于大环境里的所有对应函数,但想要通过函数来调用变量,要在使用前在函数中声明将调用的变量是来自大环境里的全局变量,而不是只适用于本函数的局部变量。而在函数内部定义的变量是局部变量,只适用于函数内部使用。
要想跨环境调用变量,有两种办法:
(1)声明:global/nonlocal
(2)将变量作为参数代入函数。