[python]局部变量和全局变量某注意点

本笔记开始于一个错误
UnboundLocalError: local variable ‘a' referenced before assignment
a局部变量在赋值之前就被调用是不可以的。

首先我们来通过下面的代码看全局变量和局部变量

>>> someVar = 42 
>>> def myFunction(): 
...     someVar = 100
...     print(someVar)
... 
>>> myFunction()
100
>>> someVar
42
>>> someVar = 1000
>>> myFunction()
100
>>> 

这就是说,定义函数的时候,全局变量和局部变量其实是不一样的,只是相同的名字但是其实指向的位置不同。这与类的方法中不同,类的方法还需要访问限制才可以做到隔绝。

然后就发现,在定义局部变量前在函数中使用局部变量(不一定有与局部变量同名的全局变量存在)就会导致“UnboundLocalError: local variable ‘a' referenced before assignment”)

>>> def a():
...     print(newvar)
...     newvar = 100
... 
>>> a()
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 2, in a
UnboundLocalError: local variable 'newvar' referenced before assignment
>>> 

解释:因为你的newvar还未在函数内部定义的时候, newvar还是一个全局变量。
必须是在函数内部赋值过了才成为局部变量
你的print(newvar)就会认为是引用一个全局变量,而之后你又定义了一个同名的局部变量,那么电脑就凌乱了,就出错啦!

>>> def myFunction():
...     some = 100
...     print(some)
... 
>>> myFunction()
100

这样写就可以。因为已经在内部定义了some,some在函数内已经是局部变量了,那么这时候在函数内部用some就都认为是局部变量。

>>> def myFunction():
...     print(some)
... 
>>> myFunction()
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 2, in myFunction
NameError: name 'some' is not defined
>>> some = 42
>>> myFunction()
42
>>> 

这样也是可以的,因为some认为是全局变量,只是没有指向,所以刚开始会显示not defined,但是赋值之后就ok拉!

就算是函数调用,其中间局部变量也不会让全局变量的指向改变。

你可能感兴趣的:([python]局部变量和全局变量某注意点)