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求解平方根的方法
Mar 11 Python
python 字典中取值的两种方法小结
Aug 02 Python
Face++ API实现手势识别系统设计
Nov 21 Python
使用pandas实现csv/excel sheet互相转换的方法
Dec 10 Python
Django框架首页和登录页分离操作示例
May 28 Python
详解用python生成随机数的几种方法
Aug 04 Python
使用python实现离散时间傅里叶变换的方法
Sep 02 Python
浅析python内置模块collections
Nov 15 Python
Python猴子补丁Monkey Patch用法实例解析
Mar 23 Python
新建文件时Pycharm中自动设置头部模板信息的方法
Apr 17 Python
python中pandas.read_csv()函数的深入讲解
Mar 29 Python
python 如何获取页面所有a标签下href的值
May 06 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
2.PHP入门
2006/10/09 PHP
用php获取本周,上周,本月,上月,本季度日期的代码
2009/08/05 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
用脚本调用样式的几种方法
2006/12/09 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
2017/02/07 Javascript
canvas实现钟表效果
2017/02/13 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
boostrap模态框二次弹出清空原有内容的方法
2018/08/10 Javascript
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
vue实现计步器功能
2019/11/01 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
详解Vue之事件处理
2020/07/10 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
python操作MySQL数据库的方法分享
2012/05/29 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
如何卸载python插件
2020/07/08 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
七一表彰活动方案
2014/01/18 职场文书
优秀教师的感人事迹
2014/02/04 职场文书
意向书范文
2014/03/31 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
2014幼儿园教师师德师风演讲稿
2014/09/10 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
2015圣诞节贺卡寄语
2015/03/24 职场文书
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers
Go并发4种方法简明讲解
2022/04/06 Golang