闭包

定义:在函数内部定义一个函数,并把这个内部函数返回成为闭包

def outer():
    print("outer")
    def inner():
        print("inner")
    return inner

自由变量:内部函数inner可以引用外部函数的局部变量和参数,外部函数的变量被内部函数引用后会一直存在,直到内部函数被销毁,这种被内部函数引用的变量称为自由变量

查看变量:

外部函数outer的局部变量,在外部函数调用结束后销毁
内部函数inner的局部变量,在内部函数调用结束后销毁
自由变量,被内部函数引用的外部函数的局部变量,和内部函数对象一起存在

nonlocal关键字:在内部函数中进行赋值操作,会创建局部变量,不会修改外部变量。使用nonlocal关键字可以将变量声明为非局部,此时即可修改外部变量。

Python装饰器

装饰器是一个可调用对象,其参数是一个函数

装饰器的闭包用法:通常情况下,装饰器函数会创建一个内部函数。当调用被装饰的函数时返回内部函数

装饰有参数的函数需要在inner函数中传递一个参数

装饰任意多个参数的函数,使用*args可以捕获任意多个参数

装饰“关键字函数的参数”:函数的参数传递有2种方式,一种是位置传递,一种是名称传递,名称传递又叫作关键字参数。**kwargs可以传递任意多个关键字参数

其他装饰器:
对象方法与类方法
类方法
静态方法
@property装饰器

迭代器与迭代对象

可迭代对象:Python的列表 元组 字符串 也可以用for循环

迭代器:使用iter()函数可以生成迭代器

next方法:用来返回下一个元素。

遍历迭代器:便利迭代器关捕获处理异常

类型判断:使用isinstance方法判断某变量是迭代器还是迭代对象

生成器

不直接生成数据而是存储数据生成的逻辑,每次调用生成器时,生成一个数字