普通函数采用return返回值

def func():

print("111")

return 222 #return返回一个值

ret =func()

print(ret)

结果:111222

将函数中的return换成yield就是生成器

def func():

print("111")

yield 222 # 整个函数是一个生成器

ret =func()

print(ret)

结果:

通过执行 __next__() 来执行以下生成器

def func():

print("111")

yield 222 # 整个函数是一个生成器

mygenerator=func()

print(mygenerator.__next__())

结果:111222

yield是分段来执行一个函数,而return是直接停止执行函数

def func():

print("111")

yield 222

print("333")

yield 444

mygenerator=func()

ret=mygenerator.__next__()

print(ret)

ret=mygenerator.__next__()

print(ret)

ret=mygenerator.__next__() #最后一个yield执行完毕,再次__next__()程序会报错

print(ret)

生成器可以使用for循环来循环获取内部的元素:

def func():

print(111)

yield 222

print(333)

yield 444

print(555)

yield 666

gen=func()

for i in gen:

print(i)

结果:

111

222

333

444

555

666

 

生成器表达式(生成器推导式)

>>> gen =(i for i in range(10))

>>> type(gen)

>>> gen.__next__()

0

>>> gen.__next__()

1

>>> gen.__next__()

2

>>> gen.__next__()

3

 

生成器的特点:

惰性机制,生成器并不立即产生全部元素,仅在用到元素的时候才生成(只能向前),可以极大节省内存。

 

https://www.cnblogs.com/mlhz/p/9469124.html

查看原文