知识点:
- 闭包
- 闭包介绍
- 闭包的必要条件
- 装饰器
- 迭代器
- 生成器
知识点说明:
1.闭包:
①闭包的作用:保证数据安全。
全局变量可以随意修改;函数内的变量无法随意修改,同样无法随意使用;使用闭包,可以保证数据无法被随意修改的同时,又让数据可以被使用。
②闭包的必要条件:
(1)闭包是一个嵌套函数
(2)外部函数返回内部函数名(非函数)
(3)内部函数使用外部函数的变量(非必要条件)
# 嵌套函数
def ext():
# 外部函数的变量为自由变量
ext_name = "外部"
def inter():
print("内部")
# 返回自由变量
return ext_name
# 返回内部函数名(非函数)
return inter
# res等同于返回的内部变量名inter
res = ext()
# 打印内部函数的返回值
print(res())
2.装饰器:
装饰器是在不改变函数功能的基础上,增加一些功能,其本质是一个闭包。定义一个装饰器后,通过@装饰器函数名,调用装饰器。
# 装饰器:可以将函数以参数形式传入
def zhuangshi(func):
# 内部函数带不定长参数,适用于不同函数调用
def inter(*args):
print("功能开启")
res = func(*args)
print("功能关闭")
# 内部函数返回调用参数的函数
return res
return inter
# @装饰器函数名
@ zhuangshi
# 定义调用装饰器的运行函数
def yunxing()
pass
res = yunxing()
print(res)
3.迭代器:Iterator
迭代器是可迭代的对象,可以实现迭代器协议,其包含的值可遍历。包含方法 iter() 和 next()。
# 获取迭代器的方法:iter()
list = [0,1,2,3,4,5]
# 获取列表list的迭代器
it_list = iter(list)
it_list = list.__iter__()
print(it_list)
# 从迭代器中获取数据:next()
print(next(it_list))
print(it_list.__next__())
4.生成器:生成器的本质是迭代器
生成器函数中必须具备关键字yield;
执行生成器函数时,不会直接执行,二是得到生成器;
生成器可以返回数据,通过next()方法,以yield为节点进行分段执行;执行到yield后,生成器会暂停执行,等待下一次指令。
# 创建生成器
def shengcheng():
# yield可以返回数据
print("大家好")
yield "这是第一个节点"
print("大家好")
yield "这是第二个节点"
print(shengcheng().__next__())
print(shengcheng().__next__())