caicaix

导航

生成器

生成器

就是节省空间,在函数里出现关键字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]

 

posted on 2023-06-05 21:44  菜CAIx  阅读(16)  评论(0编辑  收藏  举报