day11 ,12 闭包 迭代器 生成器
1.闭包
函数名第一类对象
1函数名其实就是变量名
2可以像变量一样互相赋值.
3 可以作为函数的参数,进行传递
4 可以作为返回值返回
5可以作为集合的元素进行存储
内部函数对外部函数中的变量的调用
def
outrt():
a=10
def innerr():
a
return
好处:
保护变量
常住内存
2.迭代器
1. Iterable:
可迭代的.里面有 __iter__()
2. Iterator: 迭代器. 里面有__iter__() 还有 __next__()
特点:
1,节省内存
2,惰性机制(只有执行__next__()才会取值)
3,只能向前取值,不能反复
dir()
#查看数据可执行操作的方法
isinstance()
#判断xxx对象是否是xxx类型
__name__()
#查看函数的名字
__doc__()
#查看函数的文档注释
lst=[1,2,3]
it=lst.__iter__()
while 1:
try:
it.__next__()
except StopIteration:
break
3.生成器
生成器的本质就是迭代器
生成器由生成器函数来创建或者通过生成器表达式来创建
4.生成器函数
生成器函数:在函数中return换成yield.这个函数是生成器函数
def func():
yield
gen=func() #函数并不会执行,而是创建一个生成器对象
取值:
gen.__next__() #下一个
gen.send() #可以给上一个yield传值,第一次执行不能用send()
特性:
1.节省内存
2.惰性机制
3.只能向前
5.各种推导式
1.列表推导式: [结果 for循环 if条件]
2.字典推导式: { key: value for循环 if条件}
3.集合推导式: {key for循环 if条件}
6. 生成器表达式(笔试题)
(结果 for循环 if条件)
# 计算两个数的和
def add(a, b):
return a + b
def test(): # 生成器函数
for t in range(4):
yield t
g = test()
for n in [2, 10]:
g = (add((n, i) for i in g))
print(list(g))
惰性机制
记录在内存中的一段代码.