韩漫免费漫画在线观看方法,《好好疼爱里面》免费看,年轻漂亮的女士护士内衣,妈妈醉酒后把我当爸爸电视剧

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

关注

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

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

《玉蒲团2之艳乳欲仙欲》| 星空无限传媒免费观看电视剧 | 三个男人躁我奶头好舒服| 摸摸大扔子图片| 成全高清免费观看MV| 无风险9.1免费版观看| 半推半就干朋友老婆下一句怎么接| 续父开续女包小芳的小说破| 优衣库视频在线观看| 《互换人妻HD中字》| 《漂亮的秘书HD》在线观看| 高清大片CSGO免费| CSGO暴躁妹妹免费观看电视剧| 菠萝菠萝蜜在线观看免费版电视剧| 11BBB| 母与子免费观看大全电视剧邻居大.. | 欧美| 东北娘们国语版免费播放| 老公说我越来越骚的心理| 第一次和公翁做爰又大又粗| 做到双眼失焦双男主| 上课别穿内裤方便我C电视剧| 鲁鲁影院免费观看电视剧电影| 儿媳妇陪我睡觉的经典句子| 美国伦理护士3D| -滴都不许漏》何泽城林荫| 黑丝| 美丽的小蜜桃2:美丽人生| 苏玥厨房张开腿疯狂迎合视频| 皇空无限MV国产剧入选精彩| 雨后小故事漫画| 人野兽马狗猪大全| 同学的母亲中字ID| 公交车大肉大捧一进一出好爽| 双龙戏珠3父子免费阅读全文| 男朋友摸完小花园小肚子有点痛 | 小辣椒4美国荷尔蒙| 人野兽马狗猪大全| 天美麻花高清在线看电视剧| 自慰是什么| 双飞娘俩国语免费观看视频