python yield和Generator函数用法详解


Posted in Python onFebruary 10, 2020

这篇文章主要介绍了python yield和Generator函数用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

首先我们从一个小程序导入,各定一个list,找出其中的素数,我们会这样写

import math
def is_Prims(number):

  if number == 2:
    return True
  //除2以外的所有偶数都不是素数
  elif number % 2 == 0:
    return False
  //如果一个数能被除1和本身之外的数整除,则为合数。其实我们的判定范围到根号n就可以
  for cur in range(2,int(math.sqrt(number))+1,2):
    if number % cur == 0:
      return False
    else:
      return True

def get_Prims(input_list):

  result_list = list()
  for element in input_list:
    if is_Prims(element):
      result_list.append(element)
  return result_list

aa = get_Prims([1,2,3,4,5,6,7,8,9])
print (aa)

但如果我们想给定一个数,然后列出比这个数大的所有素数呢?我们可能这样写:

def get_Prims(number):
  if is_Prims(number):
    return number

但是一旦return函数将控制权交给调用者后彻底结束,任何局部变量和函数工作都被丢弃,下一次调用又会从头开始。因此我们就可以用一下写法:

def get_Prims(number):
  while(True):
    if is_Prims(number):
      yield number
    number += 1

def get_numbers():
  total = list()
  for next_prim in get_Prims(2):
    if next_prim < 100:
      total.append(next_prim)
    else:
      print(total)
      return

get_numbers()

下面解释一下generator函数,一个函数的def代码里包含了yield,函数就自动成为了一个generator函数(及时仍包含有return),generator函数创建generator(一种特殊形式的迭代器,这个迭代器有一个内置__next__()方法),当需要一个值的时候通过yield来产生而不是直接return,因此与一般函数不同的是,此时控制权并未交出。

for循环会隐式的调用next()函数,next()函数负责调用generator中的__next__()方法,此时generator负责返回一个值给任何调用next()的方法,利用yield将此值传回去,相当于return语句。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python字符遍历的艺术
Sep 06 Python
python实现斐波那契数列的方法示例
Jan 12 Python
python虚拟环境virtualenv的安装与使用
Sep 21 Python
DataFrame 将某列数据转为数组的方法
Apr 13 Python
Django中反向生成models.py的实例讲解
May 30 Python
Python Pandas批量读取csv文件到dataframe的方法
Oct 08 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
Nov 21 Python
Python爬虫实现爬取百度百科词条功能实例
Apr 05 Python
NumPy 基本切片和索引的具体使用方法
Apr 24 Python
python协程gevent案例 爬取斗鱼图片过程解析
Aug 27 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
Feb 26 Python
PyTorch中clone()、detach()及相关扩展详解
Dec 09 Python
Tensorflow 卷积的梯度反向传播过程
Feb 10 #Python
tensorflow 实现自定义梯度反向传播代码
Feb 10 #Python
用Python做一个久坐提醒小助手的示例代码
Feb 10 #Python
Python3 元组tuple入门基础
Feb 09 #Python
Python3列表List入门知识附实例
Feb 09 #Python
Python 动态变量名定义与调用方法
Feb 09 #Python
python函数定义和调用过程详解
Feb 09 #Python
You might like
PHP中使用GD库绘制折线图 折线统计图的绘制方法
2015/11/09 PHP
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
一个简单的js鼠标划过切换效果
2010/06/30 Javascript
JQuery从头学起第三讲
2010/07/06 Javascript
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
jquery实现图片上传前本地预览功能
2016/05/10 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
JavaScript动态加载重复绑定问题
2018/04/01 Javascript
使用Vue实现移动端左滑删除效果附源码
2019/05/16 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
Python 可爱的大小写
2008/09/06 Python
python通过文件头判断文件类型
2015/10/30 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
pygame加载中文名mp3文件出现error
2017/03/31 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
kafka-python批量发送数据的实例
2018/12/27 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
python绘制彩虹图
2019/12/16 Python
解析Python 偏函数用法全方位实现
2020/06/26 Python
Ray-Ban雷朋太阳眼镜英国官网:Ray-Ban UK
2019/11/23 全球购物
服装店营销方案
2014/03/10 职场文书
书香家庭事迹材料
2014/05/09 职场文书
教师敬业奉献模范事迹材料
2014/05/18 职场文书
幼儿园中秋节活动总结
2015/03/23 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
详解Nginx 工作原理
2021/03/31 Servers
Html5调用企业微信的实现
2021/04/16 HTML / CSS