python yield读取文件,python中的yield语句是如何工作的

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: