今天在写python代码的时候遇到一个局部变量与全局变量的问题,下面来看代码:
a=30
def haha():
print(a)
a=400
haha()
print(a)
这么写会报错,为什么呢?
我的理解就是因为我在函数里面先写了print(a),但这时我函数里面并没有a这个变量,也是函数就会调用外面的全局变量a,打印出来的也是全局变量a的值,后面又有一个a=400的赋值,这就有问题了,在函数中,我已经调用了全局变量a,而我在函数里面又要定义全局变量a=400,这是超过了函数的赋值权限的,函数并没有申明这个a是全局变量,默认只能定义局部变量a。
另外一个网友的理解跟我的基本一致:
如果没有写 a = 400这一句,默认函数里面的print(a)会去全局变量找,但加了a = 400这一句,函数定义时就会把a作为局部变量了,而a的赋值a = 400这一句在print(a)的后面,所以函数定义本身就不可以这么定义,报的错误是:UnboundLocalError: local variable ‘a’ referenced before assignment
翻译过来就是:局部变量a的引用在它的定义之前,所以一调用就会报错
如果没有在函数里面定义变量a,那么是没问题的。比如:
a=30
def haha():
print(a)
haha()
print(a)
函数中没有变量a,那么会在全局变量中找a 这个变量。当然,如果在函数中定义了变量a 也没有问题,但应该写在print(a)之前,这个时候函数里面定义了一个 局部变量a,不会对外部的全局变量a 产生影响。