迭代器:
可迭代对象:但凡内置有__iter__方法的都是可迭代对象
d1 = d.__iter__()
d1是个迭代器
d1.__next__()
取下一个值
可以print出来
迭代器对象:内置有__next__方法的,并且内置有__iter__方法的对象
迭代器对象.__next__() 得到下一个值
迭代器对象.__iter__() 得到迭代器本身
文件是迭代器
生成器:
def func():
yield 1
yield 2
yield 5
g = func()
g 是个生成器,generator,是个迭代器,,,
g.__next__()
运行到第一个yield暂停返回
len('www') __len__()
next(g) __next__()
iter(可迭代对象) __iter__()
x = yield 返回值
while True:
x = yield None
print('{}'.format(x))
可以一直next
g = func()
g.send('狗吃骨头')
把变量给了x
g.send(None) 相当于next(g)
把程序运行到yield处,必须先有yield才能send
g = dog('a')
g.send(None) # 先把狗叫过来
g.send('骨头') #然后喂东西
g.send('包子')
...
程序挂起,准备好了就运行,等待着值
g.close()
关闭生成器
不能send两个值,可以传一个列表等
将值给了yield,在传给了x,返回的一直 是 111,
传给x,运行,返回值
三元表达式:res = x if 1 > 2 else y
列表生成式:l = [x for x in l if x.startswith('a')]
字典生成式:dic = {key:None for key in keys}
res = {k:v for k,v in items if k != 'gender'}
res = ()
生成生成器,元组不可变
递推
回溯
从回溯最终结果回溯到最初,再从最初的值递推得出最终的结果