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基于twisted实现简单的web服务器
Sep 29 Python
安装Python和pygame及相应的环境变量配置(图文教程)
Jun 04 Python
Django视图和URL配置详解
Jan 31 Python
python基于C/S模式实现聊天室功能
Jan 09 Python
python使用PyQt5的简单方法
Feb 27 Python
python matplotlib库绘制散点图例题解析
Aug 10 Python
安装PyInstaller失败问题解决
Dec 14 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
Apr 22 Python
如何在mac下配置python虚拟环境
Jul 06 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 Python
如何用 Python 处理不平衡数据集
Jan 04 Python
python中子类与父类的关系基础知识点
Feb 02 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脚本的10个技巧(2)
2006/10/09 PHP
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
php成功操作redis cluster集群的实例教程
2019/01/13 PHP
PHP7 其他语言层面的修改
2021/03/09 PHP
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
Lazy Load 延迟加载图片的jQuery插件中文使用文档
2012/10/18 Javascript
JavaScript的null和undefined区别示例介绍
2014/09/15 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
Windows下快速搭建NodeJS本地服务器的步骤
2017/08/09 NodeJs
快速搭建vue2.0+boostrap项目的方法
2018/04/09 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
NodeJS http模块用法示例【创建web服务器/客户端】
2019/11/05 NodeJs
原生javascript中this几种常见用法总结
2020/02/24 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
图解Python变量与赋值
2018/04/03 Python
Flask框架信号用法实例分析
2018/07/24 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
在python3.9下如何安装scrapy的方法
2021/02/03 Python
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
详解HTML5新增标签
2017/11/27 HTML / CSS
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
英国领先的男装设计师服装独立零售商:Repertoire Fashion
2020/10/19 全球购物
外科实习自我鉴定
2013/10/06 职场文书
公司财务自我评价分享
2013/12/17 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
趵突泉导游词
2015/02/03 职场文书
2015年幼儿园师德师风建设工作总结
2015/10/23 职场文书
小组口号霸气押韵
2015/12/24 职场文书
三年级作文之小小梦想
2019/12/06 职场文书
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL
AJAX实现省市县三级联动效果
2021/10/16 Javascript
中国十大神话动漫电影排行榜 哪吒登顶 白蛇缘起排第七
2022/03/21 国漫