一.什么是生成器?
生成器可以理解成是一种数据类型,特殊地是生成器可以自动实现迭代器协议
其他的数据类型需要调用自己内置的__iter__方法
所以换种说法,生成器就是可迭代对象
!回忆:很重要的迭代器协议
对象必须提供一个 next 方法,执行该方法要么返回迭代中的下一项,
要么就引起一个Stoplteration异常,以终止迭代(只能往后走不能往前退)
二.生成器的分类(两类)
python中生成器的表现形式
python中提供生成器的方式
一类是生成器函数;另一类是生成器表达式
第一类:关于生成器函数
- 与常规函数定义相同。但是返回值时使用yield而不是return。
 - yield语句一次返回一个结果,可以进行多次返回(而return只能返回一次)
 - yield每次返回一个结果,在每个结果中间,挂起函数的状态(其实就是记住我函数执行到哪一行了)
 
#举例:def test (): yield 1 g = test() #并不会执行test()函数,需要通过 g.__next__()方法来触发生成器函数执行print(g) print(g.__next__()) #执行结果<generator object test at 0x0051AA70>1
在说生成器表达式之前,补充三元表达式和列表解析
三元表达式:(顾名思义,就是有三个元素呗)
以前我们是这么写程序的:
name = 'alex'if name == 'alex': print('Ok') else: print('Not ok')
利用三元表达式我们是这么写程序的:
name = 'alex' res = 'Ok' if name == 'alex' else 'Not ok' #

