第一种情况
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)将变量作为参数代入函数。
emmm?
你第二种是global a
使用的是全局变量a的值,这个a应该是你在函数外定义的
1.你需要先复习全局变量和局部变量的概念
当a作为全局变量时,在所有函数中可以调用,但也要赋值,但是当a没有声明为全局变量时,你需要将a先赋值再作为形参传给函数来使用,比如def(a)。但是如果想你前者这样既没有声明参数也没有作为形参,那么就需要在函数中先给a先进行赋值才可以对a操作,因为在Python中给一个变量赋值就相当于定义一个变量。
因为函数里面不能对全局变量做修改,如果非要修改的话,必须加上关键字global