命名空间

 

一、命名空间

      (1) 命名空间分为三种:1、全局命名空间

                                        2、局部命名空间

                                        3、 内置命名空间

      (2) 三种命名空间的加载和取值顺序:内置命名空间>全局命名空间>局部命名空间

     (3)取值:

                在局部调用:局部命名空间->全局命名空间->内置命名空间

 

x = 1
def f(x):
    print(x)

print(10)
View Code

 

 

                  在全局调用:全局命名空间->内置命名空间

x = 1
def f(x):
    print(x)

f(10)
print(x)
View Code

二、作用域

        

作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。

全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效

局部作用域:局部名称空间,只能在局部范围生效

 

作用域:
小范围的可以用大范围的
但是大范围的不能用小范围的
范围从大到小(图)
在小范围内,如果要用一个变量,是当前这个小范围有的,就用自己的
如果在小范围内没有,就用上一级的,上一级没有就用上上一级的,以此类推。
如果都没有,报错

三、函数嵌套
函数嵌套的调用
def max2(x,y):
    m  = x if x>y else y
    return m
View Code

         函数嵌套定义

def f1():
    print("in f1")
    def f2():
        print("in f2")

    f2()
f1()
View Code

四、函数的作用域链

def f1():
    a = 1
    def f2():
        print(a)
    f2()

f1()
View Code
def f1():
    a = 1
    def f2():
        def f3():
            print(a)
        f3()
    f2()

f1()
函数作用域链2
def f1():
    a = 1
    def f2():
        a = 2
    f2()
    print('a in f1 : ',a)

f1()
作用域链3

五、闭包

    1、 闭包分为:1、闭:内部函数

                     2、包:包含对外部函数的作用域中变量的引用

    2、闭包常用的形式:

def hei():
    x = 20
    def inner():
        print(x)  #局部的
    return inner

i = hei()
i()  #全局
闭包常用的形式
posted @ 2017-07-26 16:51  孟庆健  阅读(167)  评论(0编辑  收藏  举报