python中yield的理解与使用,python中yield语句的作用

  python中yield的理解与使用,python中yield语句的作用

  

python yield和yield from用法总结

yield 作用:

注:发电机的下一个()方法在python 2中为下一个(),但在python 3中为__下一个_ _()【下一个的前后各是两个下划线】

  把一个函数变成一个发电机,带有产量的函数不再是一个普通函数。即:一个带有产量的函数就是一个发电机,它和普通函数不同,生成一个发电机看起来像函数调用,但不会执行任何函数代码,直到对其调用下一个()(在为循环中会自动调用下一个())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个产量语句就会中断,并返回一个迭代值,下次执行时从产量的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被产量中断了数次,每次中断都会通过产量返回当前的迭代值。

  产量的好处是显而易见的,把一个函数改写为一个发电机就获得了迭代能力,比起用类的实例保存状态来计算下一个下一个()的值,不仅代码简洁,而且执行流程异常清晰。

  

用print实现打印斐波拉切数列 ——基础版

#!/usr/bin/env python

  # -*-编码: utf-8 -*-def fab(最大):

  n,a,b=0,0,1

  而n max:

  打印(二)

  a,b=b,a b

  n=n 1 if _ _ name _ _== _ _ main _ _ :

  fab(6) # 1 1 2 3 5 8

用yield实现打印斐波拉切数列——升级版

#!/usr/bin/env python

  # -*-编码: utf-8 -*-def fab(最大):

  n,a,b=0,0,1

  而n max:

  产量b

  a,b=b,a b

  n=n 1 if _ _ name _ _== _ _ main _ _ :

  对于极好的中的n(6): # 1 1 2 3 5 8

  打印(n)

如何判断一个函数是否是一个特殊的generator函数

#!/usr/bin/env python

  # -*-编码: utf-8-*-从检查导入是发电机函数

  定义工厂(最大):

  n,a,b=0,0,1

  而n max:

  产量b

  a,b=b,a b

  n=n 1 if _ _ name _ _== _ _ main _ _ :

  f1=fab(3)

  #真正的极好的是一个发电机功能

  打印(isgeneratorfunction(fab))

  #假工厂(3)不是一个发电机功能

  # 而晶圆厂(3)是调用极好的返回的一个生成器打印(isgeneratorfunction(fab(3)))

用yield实现大文件读取

#!/usr/bin/env python

  # -*-编码: utf-8 -*-def读取文件(fpath):

  块大小=100

  使用打开(fpath, rb )作为f:

  而True:

  block=f.read(BLOCK_SIZE)

  如果块:

  屈服块else:

  如果_ _ name _ _== _ _ main _ _ :则返回

  fpath=/home/exercise-python 3。7 .1/投票/我的站点/我的站点/投票/测试。文本

  读取文件(路径)

  print(read_gen.__next__())

  print(read_gen.__next__())

  print(read_gen.__next__())

  print(read_gen.__next__())

  # for循环会自动调用发电机的__下一个_ _()方法,故输出效果同如上的四个打印[内容较短,4个打印就将测试。文本文件(textfile)中的内容输出完了】对于read_gen:中的数据

  打印(数据)

yield 和 yield from 用法对比

使用yield拼接可迭代对象

#!/usr/bin/env python

  #-*-编码: utf-8-*-if _ _ name _ _== _ _ main _ _ :

  astr=ABC

  列表=[1,2,3]

  adict={name: wangbm , age: 18}

  #生成

  阿根=(i for i in range(4,8))

  def gen(*args,**kw):

  对于args:中的项目

  对于:项中的我

  产量我

  new_list=gen(astr,list,adict,阿根)

  打印(列表(新列表))

  # [A , B , C ,1,2,3 姓名,年龄,4,5,6,7]

使用yield from拼接可迭代对象

#!/usr/bin/env python

  #-*-编码: utf-8-*-if _ _ name _ _== _ _ main _ _ :

  astr=ABC

  列表=[1,2,3]

  adict={name: wangbm , age: 18}

  #生成

  阿根=(i for i in range(4,8))

  def gen(*args,**kw):

  对于args:中的项目

  项目产量

  new_list=gen(astr,list,adict,阿根)

  打印(列表(新列表))

  # [A , B , C ,1,2,3 姓名,年龄,4,5,6,7]结论:

  通过以上两种方式的对比可以看出,yield from添加了iterable对象后,可以将iterable对象中的每一个元素逐一产出。与Yields相比,代码更简洁,结构更清晰。

  相关学习推荐:python视频教程

  以上是python yield和yield from usage summary的详细内容。其他相关文章请多关注盛行的IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

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