玩了两年的python,才知道if、try、for等语句并不会产生新的作用域

2013 年 8 月 9 日
 larkifly
如题, 作用域由def、class、lambda等语句产生,if、try、for等语句并不会产生新的作用域。

一直以为if,try,for都会产生作用域,哈哈。too young too simple
9399 次点击
所在节点    Python
30 条回复
lequiet
2013 年 8 月 9 日
看同事的代码发现了。。。。明明在前一个分支上定义的变量,竟然在另一个分支上用
larkifly
2013 年 8 月 10 日
哈哈,被坑的还真不少
wildog
2013 年 8 月 10 日
在js上同样被坑过的路过
raincious
2013 年 8 月 10 日
@larkifly

foreach(array(1,2,3) AS $key => $val) { }

echo $val; // 嗯?。。。。
fwee
2013 年 8 月 10 日
脚本语言貌似都是这样..
miaoever
2013 年 8 月 10 日
动态类型的语言不都是这样么。
davepkxxx
2013 年 8 月 10 日
js可以重复声明一个变量。
laskuma
2013 年 8 月 10 日
@binux 突然就觉得(1..5).each多么科学了。。
tioover
2013 年 8 月 10 日
这个是理所当然的吧
你在if 块里面声明变量,在块外不能用了还玩什么。
weakish
2013 年 8 月 11 日
依稀記得Python 2裏面 list comprehension相當於直接for,不過到Python 3裏面就有自己的域。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/78568

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX