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

2013-08-09 15:34:45 +08:00
 larkifly
如题, 作用域由def、class、lambda等语句产生,if、try、for等语句并不会产生新的作用域。

一直以为if,try,for都会产生作用域,哈哈。too young too simple
8839 次点击
所在节点    Python
30 条回复
lequiet
2013-08-09 21:37:04 +08:00
看同事的代码发现了。。。。明明在前一个分支上定义的变量,竟然在另一个分支上用
larkifly
2013-08-10 08:16:02 +08:00
哈哈,被坑的还真不少
wildog
2013-08-10 08:59:58 +08:00
在js上同样被坑过的路过
raincious
2013-08-10 09:05:25 +08:00
@larkifly

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

echo $val; // 嗯?。。。。
fwee
2013-08-10 09:06:17 +08:00
脚本语言貌似都是这样..
miaoever
2013-08-10 09:25:01 +08:00
动态类型的语言不都是这样么。
davepkxxx
2013-08-10 10:46:06 +08:00
js可以重复声明一个变量。
laskuma
2013-08-10 11:26:38 +08:00
@binux 突然就觉得(1..5).each多么科学了。。
tioover
2013-08-10 20:54:49 +08:00
这个是理所当然的吧
你在if 块里面声明变量,在块外不能用了还玩什么。
weakish
2013-08-11 00:58:37 +08:00
依稀記得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