【2020Python修炼记21】Python语法入门—生成器
程序员文章站
2023-12-24 12:17:03
【目录】 一 、生成器和yield 1、什么是生成器 2、为何要有生成器 3、如何使用生成器 二、yield表达式应用 三 、三元表达式、列表生成式、生成器表达式 3.1 三元表达式 3.2 列表生成式 3.3 生成器表达式 一、生成器(generator)和yield 1、yield关键字 有了y ......
【目录】
一 、生成器和yield
1、什么是生成器
2、为何要有生成器
3、如何使用生成器
二、yield表达式应用
三 、三元表达式、列表生成式、生成器表达式
3.1 三元表达式
3.2 列表生成式
3.3 生成器表达式
一、生成器(generator)和yield
1、yield关键字
有了yield关键字,我们就有了一种自定义迭代器的实现方式。
yield可以用于返回值,但不同于return,函数一旦遇到return就结束了,而yield可以保存函数的运行状态挂起函数,用来返回多次值
2、什么是生成器
若函数体包含yield关键字,再调用函数,并不会执行函数体代码,得到的返回值即生成器对象
栗子:
>>> def my_range(start,stop,step=1): ... print('start...') ... while start < stop: ... yield start ... start+=step ... print('end...') ... >>> g=my_range(0,3) >>> g <generator object my_range at 0x104105678>
生成器内置有__iter__和__next__方法,所以生成器本身就是一个迭代器
>>> g.__iter__ <method-wrapper '__iter__' of generator object at 0x1037d2af0> >>> g.__next__ <method-wrapper '__next__' of generator object at 0x1037d2af0>
因而我们可以用next(生成器)触发生成器所对应函数的执行:
>>> next(g) # 触发函数执行直到遇到yield则停止,将yield后的值返回,并在当前位置挂起函数 start... 0 >>> next(g) # 再次调用next(g),函数从上次暂停的位置继续执行,直到重新遇到yield... 1 >>> next(g) # 周而复始... 2 >>> next(g) # 触发函数执行没有遇到yield则无值返回,即取值完毕抛出异常结束迭代 end... traceback (most recent call last): file "<stdin>", line 1, in <module> stopiteration
for循环迭代版:
>>> for i in countdown(3): ... print(i) ... countdown start 3 2 1 done!
3、为何要有生成器
4、如何使用生成器
二、yield表达式应用
三 、三元表达式、列表生成式、生成器表达式
1、三元表达式
2、列表生成式
3、生成器表达式
推荐阅读
-
【2020Python修炼记21】Python语法入门—生成器
-
【2020Python修炼记21】Python语法入门—生成器
-
【2020Python修炼记20】Python语法入门—迭代器
-
【2020Python修炼记19】Python语法入门—装饰器
-
【2020Python修炼记14】Python语法入门—文件处理
-
【2020Python修炼记17】Python语法入门—名称空间和作用域
-
【2020Python修炼记13】Python语法入门—字符编码
-
【2020Python修炼记18】Python语法入门—函数对象+函数的嵌套+闭包函数
-
【2020Python修炼记15】Python语法入门—函数的基本使用
-
【2020Python修炼记20】Python语法入门—迭代器