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中字典的基本知识初步介绍
May 21 Python
python的keyword模块用法实例分析
Jun 30 Python
解决Python出现_warn_unsafe_extraction问题的方法
Mar 24 Python
python使用Matplotlib画饼图
Sep 25 Python
Python中类的创建和实例化操作示例
Feb 27 Python
详解Python是如何实现issubclass的
Jul 24 Python
基于python二叉树的构造和打印例子
Aug 09 Python
PyCharm2018 安装及破解方法实现步骤
Sep 09 Python
python实现一个猜拳游戏
Apr 05 Python
Python flask路由间传递变量实例详解
Jun 03 Python
pycharm专业版远程登录服务器的详细教程
Sep 15 Python
使用Python解决图表与画布的间距问题
Apr 11 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站内搜索关键词变亮的实现方法
2014/12/30 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
php简单统计在线人数的方法
2016/05/10 PHP
PHP实现微信提现功能
2018/09/30 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
Laravel5.7 数据库操作迁移的实现方法
2019/04/12 PHP
PHP检测一个数组有没有定义的方法步骤
2019/07/20 PHP
JavaScript语句可以不以;结尾的烦恼
2007/03/08 Javascript
jQuery在html有效在jsp无效的原因及解决方法
2013/08/02 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
JS中关于正则的巧妙操作
2017/08/31 Javascript
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
使用typescript构建Vue应用的实现
2019/08/26 Javascript
Moment.js实现多个同时倒计时
2019/08/26 Javascript
vue ssr服务端渲染(小白解惑)
2019/11/10 Javascript
js实现页面图片消除效果
2020/03/24 Javascript
nodeJs项目在阿里云的简单部署
2020/11/27 NodeJs
Windows上配置Emacs来开发Python及用Python扩展Emacs
2015/11/20 Python
Python解惑之True和False详解
2017/04/24 Python
Django实现文件上传下载功能
2019/10/06 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
2021/03/04 Python
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
Nasty Gal英国:美国女性服饰销售网站
2021/03/02 全球购物
计算机相关专业自荐信
2014/07/02 职场文书
公司委托书范本5篇
2014/09/20 职场文书
1000字打架检讨书
2014/11/03 职场文书
2014年团支书工作总结
2014/11/14 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
图书馆义工感想
2015/08/07 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android