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中使用gzip模块压缩文件的简单教程
Apr 08 Python
各个系统下的Python解释器相关安装方法
Oct 12 Python
Pycharm学习教程(5) Python快捷键相关设置
May 03 Python
Python建立Map写Excel表实例解析
Jan 17 Python
利用numpy和pandas处理csv文件中的时间方法
Apr 19 Python
Tensorflow实现卷积神经网络的详细代码
May 24 Python
对Python 3.5拼接列表的新语法详解
Nov 08 Python
uwsgi+nginx部署Django项目操作示例
Dec 04 Python
python存储16bit和32bit图像的实例
Dec 05 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
Jul 11 Python
浅谈django url请求与数据库连接池的共享问题
Aug 29 Python
Python代码中如何读取键盘录入的值
May 27 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自定义的格式化时间示例代码
2013/12/05 PHP
PHP实现接收二进制流转换成图片的方法
2017/01/10 PHP
PHP 裁剪图片
2021/03/09 PHP
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
js借助ActiveXObject实现创建文件
2013/09/29 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
AngularJS 输入验证详解及实例代码
2016/07/28 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
2017/06/19 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】
2018/08/29 Javascript
Vue-cli3简单使用(图文步骤)
2019/04/30 Javascript
jquery+php后台实现省市区联动功能示例
2019/05/23 jQuery
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
JavaScript实现字符串与HTML格式相互转换
2020/03/17 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
[01:30]DOTA2上海特锦赛现场采访 Loda倾情献唱
2016/03/25 DOTA
python算法学习之计数排序实例
2013/12/18 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
Python读取指定日期邮件的实例
2019/02/01 Python
python机器人运动范围问题的解答
2019/04/29 Python
Python使用tkinter实现摇骰子小游戏功能的代码
2020/07/02 Python
PatPat阿根廷:妈妈们的购物平台
2019/05/30 全球购物
java程序员面试交流
2012/11/29 面试题
大学应届生求职简历的自我评价
2013/10/08 职场文书
医学专业毕业生个人求职信
2013/12/25 职场文书
会议开场欢迎词
2014/01/15 职场文书
安全责任书怎么写
2014/07/28 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
2019年入党思想汇报格式与要求
2019/06/25 职场文书
聊聊Lombok中的@Builder注解使用教程
2021/11/17 Java/Android