微信咨询

微信咨询

13610*910*9

服务热线 7*24小时

电话咨询

Python之global的使用,关于全局变量在函数中的使用(与局部变量同名问题)

iamdu2019-12-08 21:27:48 浏览: 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 条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注