LF 第三章 装饰器和迭代器相关

名称空间

顾名思义就是存放名字的地方,比如,若变量x=1,1存放在内存里,那x存在哪里?名称空间就是存放名字x与1绑定关系的地方

x:内存地址                               1所在的内存

名称空间共3种,分别如下:

locals:是函数内的名称空间,包括局部变量和形参

globals:全局变量,函数定义所在模块的名字空间

builtins:内置模块的名字空间

作用域的查找空间

作用域的查找顺序

LEGB

L:locals :函数的名字空间,包括局部变量和形参

E:enclosing 相邻的上一级 外部嵌套函数的名字空间

G:globls 全局变量,函数定义所在的模块名字空间

B:builtins 内置模块的名字空间

闭包

举例:

def func():
    n = 10
    def func2():
        print("n=",n)
    return func2

f = func()
f()

从理论上说,当f = func()时候,func已经关闭,那么n = 10这个内部局部变量就应该释放了,但是f()仍能够打印出10,这是为什么呢?

这就是闭包的概念

整改代码发生的现象就是一个闭包

f2是放在f里面,原来是根本拿不到f2,如果要执行只能在f里面执行

但是现在 f返回了f2名称 相当于在外部拿到了里面的函数。

即 func如果返回了内部的一个东西,并且还在使用中,那么他的内存空间不会释放的。

我们在外部可以执行内部的函数,并且可以用内部函数作用域里面的所有值,这就是闭包

装饰器

猜你喜欢

转载自www.cnblogs.com/alexstraze/p/9274343.html