python 的变量作用域
自己写代码的时候还是要使用函数参数来传递变量,这样比较清晰明确。。。
1.python中没有块级作用域:
if True:
    a=1
print a
此时a的值为1,不会报错,这是因为python中没有块级作用域。
2.局部作用域:
函数中是一个单独的作用域,也即是局部作用域。当函数调用完成后,函数内部的变量失效。
3.作用域链:
python中变量会先在当前作用域内查找,如果找不到,再去上级作用域去查找。一直找不到则最后会报错。
例子:
name = "lzl"
 
def f1():
    print(name)
 
def f2():
    name = "eric"
    f1()
 
f2()
# 输出:lzl
是的,输出的是“lzl”,记住在函数未执行之前,作用域已经形成了,作用域链也生成了。
name = "lzl"
 
def f1():
    print(name)
 
def f2():
    name = "eric"
    return f1
 
ret = f2()
ret()
 
#输出:lzl
这里ret和f1的内存地址一样,是同一个函数,所以输出lzl。
def f1():
    name = 'lzl'
    name = 'lianzhilei'
    def f2():
        print(name)
    name = 'Jefrey'
    f2()
    name='xxx' 
f1()
当外部函数里有多个变量定义时,找f2()执行时,执行最近上面的变量的值
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号