美文网首页ITS·黑客
[python]局部变量和全局变量某注意点

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

作者: JEZAU | 来源:发表于2017-04-17 13:24 被阅读0次

本笔记开始于一个错误
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 "<stdin>", line 1, in <module>
  File "<stdin>", 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 "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in myFunction
NameError: name 'some' is not defined
>>> some = 42
>>> myFunction()
42
>>> 

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

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

相关文章

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

    本笔记开始于一个错误UnboundLocalError: local variable ‘a' reference...

  • python

    函数内全局变量赋值 Python中有局部变量和全局变量,当局部变量名字和全局变量名字重复时,局部变量会覆盖掉全局变...

  • python 局部变量和全局变量使用 2021-11-05

    python 局部变量和全局变量使用 a = 666 def modify_a():global aa = 20...

  • python变量区域的一个坑

    python有两种变量,全局变量和局部变量。 全局变量的scope是整个module,局部变量是函数或者class...

  • Swift-全局变量、局部变量以及类型属性

    全局变量和局部变量 全局变量和局部变量 计算属性和属性观察器所描述的功能也可以用于全局变量和局部变量。全局变量是在...

  • C语言特性(局部变量和全局变量)

    局部变量和全局变量 局部变量 局部变量根据定义形式的不同,又分为如下三种。 全局变量 在一个函数内部,如果全局变量...

  • 15 C变量的作用域

    1、局部变量和全局变量

  • 9道常见C语言面试题

    1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量...

  • python基础

    1.局部变量、全局变量 在函数内部修改全局变量时局部变量会创建一个和全局变量一样名称的局部变量,在更改的时候只会更...

  • 类,变量,迭代器

    1、变量 python中实际有4种变量,分别是全局变量,类变量,实例变量,局部变量。 - 全局变量:类之外的变量,...

网友评论

    本文标题:[python]局部变量和全局变量某注意点

    本文链接:https://www.haomeiwen.com/subject/svgaattx.html