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 pickle类库介绍(对象序列化和反序列化)
Nov 21 Python
Python实现微信公众平台自定义菜单实例
Mar 20 Python
Python编程中实现迭代器的一些技巧小结
Jun 21 Python
详解通过API管理或定制开发ECS实例
Sep 30 Python
Django model select的多种用法详解
Jul 16 Python
python飞机大战pygame游戏框架搭建操作详解
Dec 17 Python
Python 面向对象之类class和对象基本用法示例
Feb 02 Python
python实现低通滤波器代码
Feb 26 Python
Python selenium爬虫实现定时任务过程解析
Jun 08 Python
python有几个版本
Jun 17 Python
python怎么调用自己的函数
Jul 01 Python
python爬虫搭配起Bilibili唧唧的流程分析
Dec 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
一个简易需要注册的留言版程序
2006/10/09 PHP
php缓冲 output_buffering的使用详解
2013/06/13 PHP
php中如何判断一个网页请求是ajax请求还是普通请求
2013/08/10 PHP
php strrpos()与strripos()函数
2013/08/31 PHP
php版微信返回用户text输入的方法
2016/11/14 PHP
由prototype_1.3.1进入javascript殿堂-类的初探
2006/11/06 Javascript
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
教你用jquery实现iframe自适应高度
2014/06/11 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
2017/05/03 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
2018/12/03 Javascript
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
深入浅析vue中cross-env的使用
2019/09/12 Javascript
微信小程序点击列表跳转到对应详情页过程解析
2019/09/26 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
[04:03]DOTA2肉山黑名单梦之声 风暴之灵中文配音鉴赏
2013/07/03 DOTA
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
12步入门Python中的decorator装饰器使用方法
2016/06/20 Python
python 实现红包随机生成算法的简单实例
2017/01/04 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
Python使用sorted排序的方法小结
2017/07/28 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
Python爬虫实例扒取2345天气预报
2018/03/04 Python
Kears+Opencv实现简单人脸识别
2019/08/28 Python
Python3 中sorted() 函数的用法
2020/03/24 Python
浅谈Python __init__.py的作用
2020/10/28 Python
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
大学新生军训个人的自我评价
2013/10/03 职场文书
2013年大学生的自我鉴定
2013/10/24 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
2015重阳节座谈会主持词
2015/07/30 职场文书