1.生成器在 Python 中,一边循环一边计算的机制,称为生成器(Generator);

生成器是一个返回迭代器的函数,只能用于迭代操作;

2.什么是生成器函数生成器是Python中的一个对象,对这个对象进行操作,可以依次生产出按生成器内部运算产生的数据;

生成器函数指的是函数体中包含yield关键字的函数(yield就是专门给生成器用的return);

生成器可以通过生成器表达式和生成器函数获取到;

3.生成器函数的定义def add():

for i in range(10):
yield i
g = add()
print(g) # print(next(g)) # 0
print(next(g)) # 1

我们可以通过yield关键字来定义一个生成器函数,这个生成器函数返回值就是一个生成器对象;

4.生成器函数的调用def gen():

print("111111")
yield "111111"
print("222222")
yield "222222"
print("333333")
yield "333333"
g = gen()
print(g) # next(g) # 111111
next(g) # 222222
next(g) # 333333

next(g, "over")生成器函数可以使用next()迭代,且每次next()只会返回一次yield的值,然后暂停,下次一次next()时会在当前位置继续,如果没有元素可以迭代了,还 执在行next()则需要给定一个默认值,不给默认值会报错;

如果在生成器函数中使用return,则会终止迭代,且不能得到返回值;def gen():

print("111111")
yield "111111"
print("222222")
return "222222"
print("333333")
yield "333333"
g = gen()
print(g) # next(g) # 111111
next(g) # 222222, 抛出异常

5.生成器函数的使用场景# 死循环

def way():
i = 0
while True:
i += 1
yield i
c = way()
print(next(c)) # 1
print(next(c)) # 2
print(next(c)) # 3
print(next(c)) # 4

print(next(c)) # 5在生成器中使用死循环,不会一直执行,仍旧是执行多少次next(),返回多少个值;

6.生成器函数中的语法糖# 普通生成器函数way1

def way1():

for i in range(5):

yield i

# 带语法糖的生成器函数way2

def way2():

yield from range(5)

#循环输出way1

for i in way1():

print(i) #0 1 2 3 4

#循环输出way2

for j in way2():

print(j) #0 1 2 3 4语法糖指那些没有给计算机语言添加新功能,而只是对人类来说更“甜蜜”的语法;

语法糖给程序员提供了更实用的编码方式,有益于更好的编码风格,更易读;

生成器的语法糖也就是生成器的一种语法,作用是使代码更加简洁;

参考:侠课岛(9xkd.com)Python同学计划