国产成人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新手常见问题三:在异常处理时错误的使用参数

关注

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

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

扌暴辶鬲的短文| 叔嫂发生过关系后的心理变化| 1688黄桃网站进入页面| 《打烊后仅剩的沙龙樱花片尾曲》| 中字HD人妻の亂倫2| 在教室伦流澡到高HGL| 《不戴套瑜伽教练3》| 《妻欲公与媳》免费看| 19岁大学生少女免费观看电视剧| 老人船上弄雨荷1-5节| 日剧《轮流取珠》| 韩国电影火热的邻居高清完整版免. | 一品国精和二品国精的文化意义 | 法国《监狱伦理3》| 口咬的10个绝招图片| 第一章激情艳妇| 麻豆视频| 《黏糊糊的你》免费观看| 一家乱战60集全播放免费观看 | 高三妈妈用性缓解孩子压力| T大校花沉浮录续集TXT| 妈妈がだけの心に漂う| 道具调教自慰颤抖呻吟AV| 白丝小脚夹住命根上下摩擦的预防..| 男]进女黄性色AV视频| 马配人的视频在线观看| 男生的困困赛女生的困困里| 打扑克视频| 公日日躁我和公乱小说| 在车里被弄了4次高潮| 老头跪在两腿之间吃奶| 一个人在线观看免费高清电视剧| 快拨出天我是你母亲歌词监控| 王娟被老赵一夜干4次| 邻居老头把我弄舒服死了| 灭火宝贝在线观看完整免费满天星| 上司趁老公不在到家拜访| 《特别酒店》免费观看| 狗配人的大片视频大全| 局长把我奶头掏出来直接吃| 8848高清电影电视剧免费看