python全局变量必须用global定义吗,global在python中的用法解释

  python全局变量必须用global定义吗,global在python中的用法解释

  这段代码可以打印出x的值,而无需在函数中声明全局x。

  x=20

  def getx():

  打印x

  getx()

  那么,什么情况下必须使用global来声明全局变量呢?

  下面是一个多线程的python代码片段,其中x和l是全局变量,但是threadcode()函数中只声明了全局x而没有声明全局l。完整的代码可以成功运行,但是当全局x被注释掉时,它会报告一个错误。请问这是为什么?锁对象特殊吗?

  导入线程,时间,系统

  x=50

  l=螺纹。锁定()

  def线程代码():

  全球x

  l .获取()

  “打印”线程%s已被调用% threading.currentThread()。getName()

  尝试:

  打印线程%s正在运行% threading.currentThread()。getName()

  x=x 50

  “打印”线程%s将x设置为% d。“% \

  (threading.currentThread()。getName(),x)

  最后:

  发布()

  .

  对于Python2来说,对于一个全局变量,如果在你的函数中只使用它的值,而没有给它赋值(a=XXX),就不需要声明global。相反,如果你给它赋值,那么你需要声明global。如果声明了global,这意味着您将值赋给了一个全局变量,而不是局部变量。

  Python的范围解析基于称为LEGB(局部、封闭、全局、内置)的规则。看下面这个例子x=10。

  def foo():

  .x=1

  .打印x

  .

  foo()

  回溯(最近一次呼叫):

  文件“”中的第1行

  foo中文件“”的第2行

  UnboundLocalError:在赋值前引用了局部变量“x”

  这是因为,当给作用域中的变量赋值时,Python会自动将该变量视为作用域的局部变量,并在作用域外阻止同名的变量。很多时候,向函数添加赋值语句会使您从以前使用的代码中得到一个UnboundLocalError。

  以下是文档中的解释:这是因为当你给一个作用域中的变量赋值时,该变量就变成了该作用域的局部变量,并遮蔽了外部作用域中任何相似的命名变量。

  使用列表时,很容易引发这种错误。看下面这个例子:lst=[1,2,3]

  def foo1():

  .lst.append(5) #这没问题.

  .

  foo1()

  地表温度

  [1, 2, 3, 5]

  lst=[1,2,3]

  定义foo2():

  .lst=[5] #.这就有问题了!

  .

  二氧化硫()

  回溯(最近一次呼叫):

  文件“”中的第1行

  foo中文件“”的第2行

  UnboundLocalError:在赋值前引用了局部变量“lst”

  请注明文章来源和网址:https://www.iplaypy.com/wenda/wd20244.html.

  相关文章推荐

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: