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()执行时,执行最近上面的变量的值

参考:http://www.cnblogs.com/lianzhilei/p/5852959.html

posted @ 2017-12-01 11:17  机器狗mo  阅读(149)  评论(0)    收藏  举报