day12生成器

迭代器

__iter__() 获取迭代器

__next__() 下一个

生成器

本质就是迭代器

两种方式写生成器

1. 生成器函数

2. 生成器表达式

生成器函数

函数内部有yield. yield返回 -> return

yield可以把函数分段执行

生成器函数被调用的时候. 返回生成器

def func():

yield

g = func() —— 得到生成器

生成器的用法和迭代器基本一致

__next__() 开始执行生成器 .  执行到yield.

直到没有yield. 抛出StopIteration

#  最后的yield后的代码是可以执行的但是会报错. StopIteration

生成器函数里不要写return

send() 可以给上一个yield传值

send()不可以在第一个位置和最后一个位置出现

1. 省内存

2. 惰性机制,  不访问__next__() 就没有值.

3. 只能向前. 不能反复.

各种推导式(简单)

列表推导式 [结果 for循环 if判断]

字典推导式 {key: value for循环 if判断}

集合推导式 {key for循环 if判断}

没有元组推导式

生成器表达式(最难)——本质是迭代器. __next__()

(结果 for循环 if判断)

惰性机制,  不访问__next__() 就没有值.

只能向前. 不能反复.

g = (i for i in range(10))

# print(list(g)) # 把传递进来的数据转化成列表.  里面包含了for循环

# # list() => for=> __iter__() ==> __next__()

上一篇:Redis 发布订阅,小功能大用处,真没那么废材!


下一篇:从零开始学TensorFlow