注意for循环中变量的作用域

for e in collections: pass在for 循环里, 最后一个对象e一直存在在上下文中。就是在循环外面,接下来对e的引用仍然有效。这里有个问题容易被忽略,如果在循环之前已经有一个同名对象存在,这个对象是被覆盖的。如果在有代码感知的IDE中, IDE会提示变量是“被重新声明的”, 但运行时却不会出错。 for循环不是闭包,可以使用dis模块分解以下代码可以看
摘要由CSDN通过智能技术生成
for e in collections:
    pass
在for 循环里, 最后一个对象e一直存在在上下文中。就是在循环外面,接下来对e的引用仍然有效。

这里有个问题容易被忽略,如果在循环之前已经有一个同名对象存在,这个对象是被覆盖的。

如果在有代码感知的IDE中, IDE会提示变量是“被重新声明的”, 但运行时却不会出错。 

for循环不是闭包,可以使用dis模块分解以下代码可以看到:

x = 5

for x in range(10):
    pass

print x
将代码保存到test.py文件,运行python -m dis test.py

C:\Users\Patrick\Desktop>python -m dis test.py
  1           0 LOAD_CONST               0 (5)
              3 STORE_NAME               0 (x)

  3           6 SETUP_LOOP              20 (to 29)
              9 LOAD_NAME                1 (range)
             12 LOAD_CONST               1 (10)
             15 CALL_FUNCTION            1
             18 GET_ITER
        >>   19 FOR_ITER                 6 (to 28)
             22 STORE_NAME               0 (x)

  4      
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值