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 相关文章推荐
Python3实现从文件中读取指定行的方法
May 22 Python
关于Python元祖,列表,字典,集合的比较
Jan 06 Python
Python实现Logger打印功能的方法详解
Sep 01 Python
Python实现动态添加属性和方法操作示例
Jul 25 Python
python采集微信公众号文章
Dec 20 Python
Python搭建Spark分布式集群环境
Jul 05 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
Jul 11 Python
Django model update的多种用法介绍
Mar 28 Python
python scrapy爬虫代码及填坑
Aug 12 Python
pycharm 设置项目的根目录教程
Feb 12 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
Sep 24 Python
anaconda升级sklearn版本的实现方法
Feb 22 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
ob_start(),ob_start('ob_gzhandler')使用
2006/12/25 PHP
php中数字、字符与对象判断函数用法实例
2014/11/26 PHP
thinkphp备份数据库的方法分享
2015/01/04 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
锋利的jQuery 第三章章节总结的例子
2010/03/23 Javascript
IE8 中使用加速器(Activities)
2010/05/14 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
JavaScript实现滑动导航栏效果
2017/08/30 Javascript
nodejs使用express获取get和post传值及session验证的方法
2017/11/09 NodeJs
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
JavaScript的一些小技巧分享
2021/01/06 Javascript
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
python实现中文转换url编码的方法
2016/06/14 Python
Python 3.8 新功能全解
2019/07/25 Python
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
如何整合JQuery和Prototype
2014/01/31 面试题
生物化工工艺专业应届生求职信
2013/10/08 职场文书
自荐信的基本格式
2014/02/22 职场文书
应聘英语教师求职信
2014/04/24 职场文书
廉洁自律演讲稿
2014/05/22 职场文书
计划生育证明格式范本
2014/09/12 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
工作调动申请报告
2015/05/18 职场文书
英语演讲开场白
2015/05/29 职场文书
法制主题班会教案
2015/08/13 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
Ajax实现局部刷新的方法实例
2021/03/31 Javascript