python yield读取文件,python中的yield语句是如何工作的
Mylist是一个迭代器,无论是使用复杂表达式列表还是直接创建列表,它都是一个可重复的对象。
计算机编程语言
一个
2
三
四
五
六
mylist=[x*xforxinrange(3]) ]
foriinmylist:
我是印刷品(一)
0
一个
四
您可以使用“for in”来操作可重复的对象,如列表、字符串和文件。这些可重复的对象对我们来说很容易使用。因为,你可以根据自己的意愿反复阅读。但是,所有元素都必须存储在内存中。如果那些对象有很多元素,并不都是对你有帮助的。
发电机(发电机)
生成器也是可重复的对象,但是并不是所有的值都存储在内存中,所以只能读取一次。动态生成值。
计算机编程语言
一个
2
三
四
五
6mygenerator=(x*xforxinrange(3)))
foriinmygenerator:
我是印刷品(一)
0
一个
四
使用和的结果是相同的,但不会返回任何结果,因为mygenerator中for的第二次运行只能使用一次。先算0,再算1,再算4,依此类推。
产量
Yield是关键词,用法和return一样。Yield告诉程序函数返回到生成器。
计算机编程语言
一个
2
三
四
五
六
七
八
九
10
11
12
13
defcreateGenerator():
我的列表=范围(3)
foriinmylist:
伊尔迪一世
我的生成器=创建生成器(#)
创建一个生成器
打印(我的生成器)#
我的发电机是一个物体!
foriinmygenerator:
我是印刷品(一)
0
一个
四
这个例子本身没有什么意义,但是它清楚地表明了函数将返回一组只能读取一次的值。为了掌握yield,我们首先要明白,当一个敏感节点调用一个生成器函数时,比如上面例子中的createGenerator(),程序并不执行函数中的代码,只是返回生成器对象。这个方法很微妙。每次循环迭代生成器时,都会执行函数中的代码。
第一次执行函数时,会返回循环中的第一个值,从函数开始直到遇到yield,然后交互执行,返回,直到不再返回该值。如果函数正在运行,但没有遇到yield,生成器可能为空,因为循环可能已被终止,或者不满足“if/else”。
接下来,阅读一些代码来理解生成器的优点。
控制发生器的圈套
计算机编程语言
一个
2
三
四
五
六
七
八
九
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建立34classbank(:)银行并建造ATM。危机=错误。defcreate_ATM(self):whilenotself.crisis:是100
汇丰=银行(#没有危机的时候,想吐多少自动取款机就吐多少。
corner _ street _ ATM=HSBC . create _ ATM(
print(corner_street_ATM.next()
$100
print(corner_street_ATM.next()
$100
print([corner _ street _ ATM . next]for cashinr
安歌(5)])
[$100,$100,$100,$100,$100]
Hsbc.crisis=True#危机来了,银行没钱了。
print(corner_street_atm.next())
wall _ street _ ATM=HSBC . ce ate _ ATM()#新建成的ATM,银行还是没钱。
print(华尔街自动柜员机. next())
Hsbc.crisis=False#麻烦的是,即使危机过后,银行还是空空如也。
print(corner_street_atm.next())
Brand _ new _ ATM=HSBC。Create _ ATM () #构造一个新的ATM并恢复业务
forcashinbrand_new_atm:
.打印现金
$100
$100
$100
$100
$100
$100
$100
$100
$100
对于访问控制资源,生成器非常有用。
迭代工具,你最好的朋友
迭代工具模块包含操作迭代器的指定函数。想复制一个迭代器?链接两个迭代器?用一个liner将一组值与一个嵌入式列表结合起来(这里的one-liner只用一行代码就能完成的任务)?不使用列表创建地图/邮政编码?你所要做的就是导入itertools,例如:
四马比赛到达终点线的所有可能性排名:
计算机编程语言
一个
2
三
四
五
六
七
八
九
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
马=[1,2,3,4]
比赛=工具.排列(马)
印刷品(比赛)
print(list(ITER tools . permutations(horses)))
[(1,2,3,4),
(1,2,4,3),
(1,3,2,4),
(1,3,4,2),
(1,4,2,3),
(1,4,3,2),
(2,1,3,4),
(2,1,4,3),
(2,3,1,4),
(2,3,4,1),
(2,4,1,3),
(2,4,3,1),
(3,1,2,4),
(3,1,4,2),
(3,2,1,4),
(3,2,4,1),
(3,4,1,2),
(3,4,2,1),
(4,1,2,3),
(4,1,3,2),
(4,2,1,3),
(4,2,3,1),
(4,3,1,2),
(4,3,2,1)]
理解迭代的内部机制:
迭代是iterables对象(迭代器,实现_ _ iterator _ _()方法)和迭代器(迭代器,实现__next__()方法)的运算过程。可迭代对象是任何可以返回迭代器的对象,迭代器是用于在迭代器中迭代的对象。换个说法,迭代器对象的_ _ iterator _ _()方法可以返回一个迭代器对象,迭代器通过调用next()方法可以得到每个值。读者可以结合Java API中的迭代器接口和迭代器接口进行类比。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。