国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > Python基础教程 > Python新手常见问题四:误用Python作用域的规则

Python新手常见问题四:误用Python作用域的规则

头像

爱喝马黛茶的安东尼

2019-06-28 09:36:133197浏览 · 0收藏 · 0评论

误用Python作用域的规则

Python的作用域解析是基于叫做LEGB(Local(本地),Enclosing(封闭),Global(全局),Built-in(内置))的规则进行操作的。这看起来很直观,对吧?事实上,在Python中这有一些细微的地方很容易出错??凑飧隼樱?br/>

>>> x = 10
>>> def foo():
...     x += 1
...     print x
...
>>> foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in foo
UnboundLocalError: local variable 'x' referenced before assignment

这是怎么回事?

这是因为,在一个作用域里面给一个变量赋值的时候,Python自动认为这个变量是这个作用域的本地变量,并屏蔽作用域外的同名的变量。

相关推荐:《Python视频教程

很多时候可能在一个函数里添加一个赋值的语句会让你从前本来工作的代码得到一个UnboundLocalError。(感兴趣的话可以读一读这篇文章。)

在使用列表(lists)的时候,这种情况尤为突出??聪旅嬲飧隼樱?/p>

>>> lst = [1, 2, 3]
>>> def foo1():
...     lst.append(5)   
# 这没有问题...
...
>>> foo1()
>>> lst
[1, 2, 3, 5]
 
>>> lst = [1, 2, 3]
>>> def foo2():
...     lst += [5]      
# ... 这就有问题了!
...
>>> foo2()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in foo
UnboundLocalError: local variable 'lst' referenced before assignment

嗯?为什么foo2有问题,而foo1没有问题?

答案和上一个例子一样,但是更加不易察觉。foo1并没有给lst赋值,但是foo2尝试给lst赋值。注意lst+=[5]只是lst=lst+[5]的简写,由此可以看到我们尝试给lst赋值(因此Python假设作用域为本地)。但是,这个要赋给lst的值是基于lst本身的(这里的作用域仍然是本地),而lst却没有被定义,这就出错了。

相关推荐:

Python新手常见问题三:在异常处理时错误的使用参数

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

《吃你吃上瘾》| 快拨出天我是你母亲歌词监控 | 《炸梨吧!巨棒》免费阅读漫画| 《饥饿妻子》完整版在线观看| 鲁鲁射击免费播放电视剧全部| SNH48欧洲码和亚洲码图片| 韩剧| 120分钟做爰A片免费| 成品PPT网站大片| 宝宝水帘洞都拉丝了怎么办| 小辣椒4美国荷尔蒙| 窝窝影院在线观看免费播放电视剧 | 来吧儿子妈妈是纯还是混| 我和两个继拇交换做爰| 陈宝莲作品| 成年二人世界免费观看电视剧| 午马影视免费观看电视剧| 真人版结婚之夜女性教育PPT| 泰山与珍妮HD未删减| 《老板送醉酒丈夫回家》 | 后母和子在玉米地之间的寓意 | 性感美胸| 公司企业文化展示墙| 变硬最快的方法是什么| 儿媳妇免费播放全部电视剧| 丰满岳妇张开腿任你躁| 在车里被弄了4次高潮| 坤坤寒入桃子里电视剧| 《日本公与媳5》公妇伦| 扌暴辶鬲和扌暴辶的区别| 小蓝电影全集免费观看 | 三叶草M码和欧洲码区别| 三飞母姐妹花女儿的小说目录| 如何画胸| 台球室的特殊待遇2HD| 精产国品一二三产品区别视频| 人狗大战5高清正版免费观看 | 十一天十一夜| 自制入体小玩具怎么做| 免费观看已满十八岁电视剧在线播.| 《性88分钟》