人生苦短,我用python。

一、生成器

在Python中,这种一边循环一边计算的机制,称为生成器:generator

生成器是这样一个函数,它记住上一次返回时在函数体中的位置。对生成器函数的第二次(或第 n 次)调用跳转至该函数中间,而上次调用的所有局部变量都保持不变。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
L = [x*2 for x in range(0,5)]  # 列表生成式

G = (x*2 for x in range(0,5)) # 创建生成器方法1:只需要把列表生成式的[]换成()
next(G) # 可以通过next()获得下一个返回值,没有返回值时抛出StopIteration异常
for x in G: # 最好通过for循环来迭代生成器,并且不需要关心StopIteration异常
print(x)

def double(num): # 创建生成器的方法2:需要在函数中用yield生成
for x in range(num):
yield x*2 # yield生成
return 'done'
G = double(5)
G.__next__() # 也可以通过__next__()获得下一个返回值,和next()等价
for x in G:
print(x)


def gen():
i = 0
while i<5:
temp = yield i # 并不是把i的值赋给temp,而是把yield表达式的结果赋给temp
print(temp)
i+=1
f = gen()
next(f)
next(f) # next()相当于send(None),send()给yield表达式的值是None
f.send('haha') # send()将yield表达式结果写成‘haha’赋给temp

持续更新…

最后更新: 2018年12月04日 15:17

原始链接: http://pythonfood.github.io/2017/12/30/python生成器/

× 多少都行~
打赏二维码