函数的使用范围-Python作用域,python 变量 作用域

  函数的使用范围:Python作用域,python 变量 作用域

  

  误用Python作用域的规则

  Python的范围解析基于称为LEGB(局部、封闭、全局、内置)的规则。这看起来很直观,对吧?其实Python中有一些微妙的点容易出错。看看这个例子:

  x=10

  deffoo():

  .x=1

  .printx

  .

  foo()

  回溯(mostrecentcalllast):

  文件 stdin ,第1行,在模块中

  文件“标准输入”,第2行,信息

  BoundLocalError 3360局部变量 x ReferencedBeforeAssignment怎么回事?

  这是因为,当给作用域中的变量赋值时,Python会自动将该变量视为作用域的局部变量,并在作用域外阻止同名的变量。

  相关:《Python视频教程》

  很多时候,向函数添加赋值语句会使您从以前使用的代码中得到一个UnboundLocalError。有兴趣可以看看这篇文章。)

  使用列表时尤其如此。请看下面的例子:

  lst=[1,2,3]

  deffoo1():

  .第一附加项(5)

  #那没问题.

  .

  foo1()

  地表温度

  [1,2,3,5]

  lst=[1,2,3]

  deffoo2():

  .lst=[5]

  # .这就有问题了!

  .

  二氧化硫()

  回溯(mostrecentcalllast):

  文件 stdin ,第1行,在模块中

  文件“标准输入”,第2行,信息

  BoundLocalerror :局部变量 lst Referencedbeforeassignment,嗯?为什么foo2有问题,foo1没有问题?

  答案和上一个例子一样,只是更不易察觉。Foo1没有给lst赋值,但是foo2试图给lst赋值。注意lst=[5]只是lst=lst [5]的缩写,从中可以看出我们是在尝试给lst赋值(所以Python假设作用域是局部的)。但是这个要赋给lst的值是基于lst本身的(这里的作用域还是局部的),但是lst没有定义,这就出错了。

  相关建议:

  Python新手常见问题3:异常处理中使用了错误的参数

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

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