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实现批量转换文件编码(批转换编码示例)
Jan 23 Python
浅谈Python中copy()方法的使用
May 21 Python
python结合opencv实现人脸检测与跟踪
Jun 08 Python
Python利用ElementTree模块处理XML的方法详解
Aug 31 Python
Python迭代器定义与简单用法分析
Apr 30 Python
python实现批量图片格式转换
Jun 16 Python
python实现周期方波信号频谱图
Jul 21 Python
Python 实现子类获取父类的类成员方法
Jan 11 Python
对python中的装包与解包实例详解
Aug 24 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
Oct 24 Python
python opencv图片编码为h264文件的实例
Dec 12 Python
Python游戏开发实例之graphics实现AI五子棋
Nov 01 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 Smarty 字符比较代码
2011/02/27 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
php简单压缩css样式示例
2016/09/22 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
jquery下组织javascript代码(js函数化)
2010/08/25 Javascript
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
javascript修改IMG标签的src问题
2014/03/28 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
2017/02/20 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
vue开发拖拽进度条滑动组件
2019/09/21 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
jQuery 隐藏/显示效果函数用法实例分析
2020/05/20 jQuery
Python学习笔记_数据排序方法
2014/05/22 Python
python中zip和unzip数据的方法
2015/05/27 Python
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
python修改list中所有元素类型的三种方法
2018/04/09 Python
python获取地震信息 微信实时推送
2019/06/18 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
python 计算积分图和haar特征的实例代码
2019/11/20 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
计算机专业个人求职自荐信
2013/09/21 职场文书
幼儿园母亲节活动方案
2014/03/10 职场文书
2014全国两会心得体会
2014/03/17 职场文书
促销活动总结报告
2014/04/26 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
销售员岗位职责
2014/06/09 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
2014七年级班主任工作总结
2014/12/05 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
go结构体嵌套的切片数组操作
2021/04/28 Golang