码迷,mamicode.com
首页 > 编程语言 > 详细

python的变量作用域问题

时间:2014-12-26 21:38:33      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:

偶然掉进了一个坑里。仔细分析了下原因。原来是变量作用域的问题。简单抽象如下:

id=1
#许多行代码
[id for id in range(10)]
#许多行代码

if id!=1:
    #做一些事情
    pass
else:
    #做另外一些事情

 

结果由于id在

[id for id in range(10)]

  中受到了影响发生了变化,导致虫虫的产生。

 

索性探索了下变量作用域,结论如下:

1. 函数中的同名变量不会影响函数外的同名变量(若为加任何修饰--比如global)

id=1
def test():
    id=2

print id
#===1

2. 变量的最小作用域是一个函数。在函数内部,变量的作用是从始至终的。(这不同于其他语言)

id = 1
if True:
    id=2

print id
#===2

id = 1
for i in range(10):
    id=i
print i
#====9

同样下面的也是ok的:

if True:
    b=1
print b

输出1,不会因为b在if/for/while下面而成为一个局部的临时代码块变量!

变量的最小作用范围是函数,甚至极端点,下面的也是输出1的:

for i in range(10):
    for j in range(2):
        if True:
            if True:
                if True:
                    c=1

print c

  

python的变量作用域问题

标签:

原文地址:http://www.cnblogs.com/Tommy-Yu/p/4187539.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!