python之闭包、装饰器

1. 函数的作用域

  1.在函数定义时候就固定,于调用位置无关,在调用的时候返回到函数定义的位置

x=1 #全局作用
def f1():      #整个f1函数是定义阶段
    def f2():
        print(x)
    return f2


def foo(func):
    x=3
    func() #func()调用阶段
x=200  #这样定义x又变成全局了
foo(f1())          #执行foo(f1()) 返回到F1函数里找x所以打印是1不是3

2.名称空间

内置名称空间:在python解释器启动产生的空间,简单理解就是python自带的方法比如:max()len()

全局名称空间 :在全局定义的好的名称空间,文件级别的产生的 比如:

x=1  #全局作用
def test():
  x=2 #局部作用
print(x) test()

if x=1 y=2
#全局作用
#在执行test()调用的时候先加载内置查找有没有test这个内置函数,如果去全局里查找test这个函数方法,最后局部
 

局部名称空间:在调用函数时候产生局部名称空间 y=2,在调用teset()立马产生了局部作用空间

nonlocal x 函数正上方的x的变量
global x 改成全局的变量

3.闭包函数

 

猜你喜欢

转载自www.cnblogs.com/yingfei/p/9762656.html