Day4_名称空间与作用域

函数嵌套:

函数的嵌套调用:在调用一个函数的过程中,又调用了了另外一个函数 
比如说比较多个值的大小,可以利用这种方法
def max2(x,y):
    if x > y:
        return x
    else:
        return y

def max4(a,b,c,d):
    res1=max2(a,b)
    res2=max2(res1,c)
    res3=max2(res2,d)
    return res3

print(max4(1,2,3,4))
 
函数的嵌套定义:在一个函数的内部,又定义了另外一个函数。 
名称空间: 存放名字的地方,准确的说名称空间是存放名字与变量值绑定关系的空间。
分为三种空间:
内置名称空间: python自带的名字,在python解释器启动时产生,存放一些python内置的名字。
全局名称空间: 在群居都能使用的定义,在执行文件时,存放文件级别定义的名字。
局部名称空间: 在执行文件的过程中,如果调用了函数,则会产生该函数的局部名称空间。用来存放该函数内定义的名字。在函数调用时生效,在函数调用结束后失效。

加载顺序; 内置---》全局-----》局部
定义的名字查找顺序:自下而上的查找
当定义了两个相同的函数,以后定义的为准:
def func0():
    print('1111111')
def func0():
    print('2222222')

func0()

 



作用域:作用的范围
全局作用域:全局存活,全局有效
局部作用域:临时存活,只能在函数内访问

global 和 nonlocal  关键字: 
x=1
def f1():
    global x  #意思是在局部改掉全局的变量或者定义
    x=2
f1()
print(x)

如果全局是可变类型的时候,可以改变全局类型
l=[]
def f2():
    l.append('f2')
f2()
print(l)



改掉函数内部上一层的变量,只在函数内部有效,如果上层没有的话,再向上找,不能改掉全局的
def f1():
    x=1
    def f2():
        x=2
        def f3():
            nonlocal x
            x=3
        f3()
    f2()
f1()
print(x)

作用域
关系,在函数定义的时候就已经固定好了,于调用位置无关。
x=1
def f1():
    def f2():
        print(x)
    return f2   #相当于函数当做返回值,这里没有括号
#如果此时令func=f1(),即此时func=f2
func=f1()
print(func)

 



 



posted @ 2017-07-26 17:39  sexiaoshuai  阅读(123)  评论(0编辑  收藏  举报