生成器
生成器
就是节省空间,在函数里出现关键字yield,函数就变成了生成器,就不再执行函数了
想要使用生成器,只需要使用next取值即可
每next取一次值代码走到下一个yield处停止
yield后面如果有很多数据,会以元组的形式输出
def index():
print('执行')
yield 123,234,345
res = index() #激活成生成器
print(res.__next__()) 取出值
自定义range
由于for循环内部自带next
1 def my_range(x, y = None, z = 1 ): 2 if not y: 3 x = y 4 y = 0 5 while x < y: 6 yield x 7 x += z 8 9 10 res = my_range(2, 7) 11 for i in res: 12 print(i)
yield关键字的传参问题
只要函数里有yield,就不再执行而是变成了生成器
return和yield的对比
retrun
1.函数遇到return会直接终止运行
2.return也可以返回多个值
yield
1.函数遇到yield代码不会立刻停止运行,而是 ' 停住 '
2.yield也可以返回多个值,以元组的形式返回
3.yield可以把函数变成生成器,而且还支持传参
生成器表达式
笔试题
选c
1 def add(n, i): 2 return n + i 3 # 调用之前是函数 调用之后是生成器 4 def test(): 5 for i in range(4): 6 yield i 7 g = test() # 初始化生成器对象 8 for n in [1, 10]: 9 g = (add(n, i) for i in g) 10 res = list(g) 11 print(res) 12 13 #A. res=[10,11,12,13] 14 #B. res=[11,12,13,14] 15 #C. res=[20,21,22,23] 16 #D. res=[21,22,23,24]