【1.26】作用域

1、作用域

name = “alex”
def foo():
    name = “linhaifeng”
    def bar():
        name =“wupeiqi”
        print(name)
    return bar    #返回函数的bar的内存地址
a=foo()
print a
a()  #bar()  这里就是函数地址加( ) 表示执行bar这个函数

 

2、块级作用域  python中没有这个

块级作用域

想想此时运行下面的程序会有输出吗?执行会成功吗?

#块级作用域
 
if 1 == 1:
    name = "lzl"
 
print(name)
 
 
for i in range(10):
    age = i
 
print(age)
 
代码执行成功,没有问题;在Java/C#中,执行上面的代码会提示name,age没有定义,而在Python中可以执行成功,这是因为在Python中是没有块级作用域的,代码块里的变量,外部可以调用,所以可运行成功;
 
3、

3、作用域链   爷爷  爸爸 儿子 孙子   一级一级找 少那个都得不到孙子

对函数做下调整,看看下面的代码执行结果如何?

#作用域链
 
name = "lzl"
def f1():
    name = "Eric"
    def f2():
        name = "Snor"
        print(name)
    f2()

f1()
 

学过函数,肯定知道最后f1()执行完会输出Snor;

我们先记住一个概念,Python中有作用域链,

变量会由内到外找,先去自己作用域去找,

自己没有再去上级去找,直到找不到报错

 

4、终极版作用域  函数体定义完成后 其变量的作用域就形成了  记住函数也是一个变量  

好,铺垫了够了,终极版的来了~~

#终极版作用域
 
name = "lzl"
 
def f1():
    print(name)
 
def f2():
    name = "eric"
    f1()
 
f2()

posted @ 2016-03-17 18:27  科学小怪癖  阅读(79)  评论(0)    收藏  举报