python中yield什么意思


本文摘自php中文网,作者藏色散人,侵删。

python中yield什么意思?

可迭代对象

mylist 是一个可迭代的对象。当你使用一个列表生成式来建立一个列表的时候,就建立了一个可迭代的对象:

1

2

3

>>> mylist = [x*x for x in range(3)]

>>> for i in mylist :

...    print(i)

在这里,所有的值都存在内存当中,所以并不适合大量数据

生成器

可迭代

只能读取一次

实时生成数据,不全存在内存中

1

2

3

>>> mygenerator = (x*x for x in range(3))

>>> for i in mygenerator :

...    print(i)

注意你之后不能再使用for i in mygenerator了

yield关键字

yield 是一个类似 return 的关键字,只是这个函数返回的是个生成器

当你调用这个函数的时候,函数内部的代码并不立马执行 ,这个函数只是返回一个生成器对象

当你使用for进行迭代的时候,函数中的代码才会执行

1

2

3

4

5

6

7

8

9

10

>>> def createGenerator() :

...    mylist = range(3)

...    for i in mylist :

...        yield i*i

...

>>> mygenerator = createGenerator() # create a generator

>>> print(mygenerator) # mygenerator is an object!

<generator object createGenerator at 0xb7555c34>

>>> for i in mygenerator:

...     print(i)

第一次迭代中你的函数会执行,从开始到达 yield 关键字,然后返回 yield 后的值作为第一次迭代的返回值. 然后,每次执行这个函数都会继续执行你在函数内部定义的那个循环的下一次,再返回那个值,直到没有可以返回的。

控制生成器的穷尽

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

28

29

30

31

32

33

34

35

>>> class Bank(): # let's create a bank, building ATMs

...    crisis = False

...    def create_atm(self) :

...        while not self.crisis :

...            yield "$100"

>>> hsbc = Bank() # when everything's ok the ATM gives you as much as you want

>>> corner_street_atm = hsbc.create_atm()

>>> print(corner_street_atm.next())

$100

>>> print(corner_street_atm.next())

$100

>>> print([corner_street_atm.next() for cash in range(5)])

['$100', '$100', '$100', '$100', '$100']

>>> hsbc.crisis = True # crisis is coming, no more money!

>>> print(corner_street_atm.next())

<type 'exceptions.StopIteration'>

>>> wall_street_atm = hsbc.create_atm() # it's even true for new ATMs

>>> print(wall_street_atm.next())

<type 'exceptions.StopIteration'>

>>> hsbc.crisis = False # trouble is, even post-crisis the ATM remains empty

>>> print(corner_street_atm.next())

<type 'exceptions.StopIteration'>

>>> brand_new_atm = hsbc.create_atm() # build a new one to get back in business

>>> for cash in brand_new_atm :

...    print cash

$100

$100

$100

$100

$100

$100

$100

$100

$100

...

相关推荐:《Python教程》

以上就是python中yield什么意思的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python是什么意思中文

Python运算符-经常能用到的成员运算符(实例解析)

Python中函数赋值给变量时的问题注意详解

ansible作为Python模块库使用的方法

Python输入十个数如何输出最大值

信息竞赛一定要Python

Python实现循环定时器的方法介绍(附代码)

Python可变参数*args和**kwargs用法实例小结

Python中map()函数的方法示例

Python什么时候用类方法

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...