python的变量作用域问题

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

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)