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类型强制转换long to int的代码
Feb 10 Python
Python实现随机生成有效手机号码及身份证功能示例
Jun 05 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 Python
利用Pandas 创建空的DataFrame方法
Apr 08 Python
python删除不需要的python文件方法
Apr 24 Python
python获取文件真实链接的方法,针对于302返回码
May 14 Python
Pytorch: 自定义网络层实例
Jan 07 Python
python自动脚本的pyautogui入门学习
Apr 01 Python
Django import export实现数据库导入导出方式
Apr 03 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 Python
Pycharm如何自动生成头文件注释
Nov 14 Python
Pytorch 实现变量类型转换
May 17 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
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
2014/07/08 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
常见JS验证脚本汇总
2015/12/01 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
js实现图片放大展示效果
2017/08/30 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
jQuery 隐藏/显示效果函数用法实例分析
2020/05/20 jQuery
python操作xml文件示例
2014/04/07 Python
python实现批量下载新浪博客的方法
2015/06/15 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
Python Numpy 数组的初始化和基本操作
2018/03/13 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
Python selenium文件上传下载功能代码实例
2020/04/13 Python
Giuseppe Zanotti美国官方网站:将鞋履视为高级时装般精心制作
2018/02/06 全球购物
日本必酷网络直营店:Biccamera
2019/03/23 全球购物
家长对小学生的评语
2014/01/28 职场文书
拓展策划方案
2014/06/03 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
《开国大典》教学反思
2016/02/16 职场文书
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python
新手入门Mysql--sql执行过程
2021/06/20 MySQL
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python
MySQL 逻辑备份 into outfile
2022/05/15 MySQL
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript