Python之global的使用,关于全局变量在函数中的使用(与局部变量同名问题)
iamdu2019-12-08 21:27:48Python 浏览: 128759 1、用交互模式先展示一下
>>> num = 999 #全局变量
>>> def test():
... num = 188 #同名的局部变量出现
... print (num) #打印的是局部变量num
...
>>> test()
188
2、再show一个例子,就是上面提到的,直接抛出异常了
number = 9999
def test():
number = number + 1
print( number)
test()
输出结果:此时 number = number + 1,
首先number在等于(=)符号的前面出现了,所以后面的number就会被认为是局部变量,此时局部变量number还没有赋值(即创建),怎么就能+1呢? 等同于 number = ? + 1,所以抛出了异常。
Traceback (most recent call last): File “/Users/wp/Downloads/monkeyPython/test.py”, line 8, in test() File “/Users/wp/Downloads/monkeyPython/test.py”, line 4, in test number = number + 1 UnboundLocalError: local variable ‘number’ referenced before assignment
改进方案1:为局部变量赋初始值
number = 9999
def test():
number = 500 #init number
number = number + 1
print (number)
test()
改进方案2:使用global引用全局变量
number = 9999
def test():
global number #add global
number = number + 1
print number
test()
3、再来个例子,此时虽然也用了全局变量,但因为没有与全局变量同名的局部变量创建,所以可以省略Global:那就是在等于(=)符号后面调用一个全局变量,可见变量出现的位置在【赋值前】和【赋值后】,还是满重要的(因为没有赋值操作,解释器就不会创建一个局部变量)
此时可以省略global
number = 9999
def test(): number + 1 #此时解释器会先在test()内找,没有找到的情况下,会自动调用全局变量的 number print number
test() 当然也可以加上global
number = 9999
def test():
global number
number + 1
print (number)
test()
4、总结
a、如果在函数内,变量定义在=的前面,有赋值行为,这将被视为定义一个局部变量(比如a =5 )
b、在调用时,如果在函数内有局部变量与全局变量是同名时,函数内将优先使用那个局部变量
c、变量出现=的后面时,优先会去找局部变量,如果没有找到的话,就会去找全局变量,再没有找到的话,就抛出错误 ————————————————
欢迎留下你的看法
共 0 条评论