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模块学习 datetime介绍
Aug 27 Python
Python选择排序、冒泡排序、合并排序代码实例
Apr 10 Python
Python 自动刷博客浏览量实例代码
Jun 14 Python
Python打印输出数组中全部元素
Mar 13 Python
python 常用的基础函数
Jul 10 Python
Python利用字典破解WIFI密码的方法
Feb 27 Python
Django 源码WSGI剖析过程详解
Aug 05 Python
python kafka 多线程消费者&amp;手动提交实例
Dec 21 Python
Pytorch中Tensor与各种图像格式的相互转化详解
Dec 26 Python
Python+appium框架原生代码实现App自动化测试详解
Mar 06 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
Apr 15 Python
Keras - GPU ID 和显存占用设定步骤
Jun 22 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压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
2018/04/26 PHP
thinkphp5框架路由原理与用法详解
2020/02/11 PHP
Laravel6.18.19如何优雅的切换发件账户
2020/06/14 PHP
javascript动态加载三
2012/08/22 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
2014/05/11 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
详解JavaScript中的表单验证
2015/06/16 Javascript
Jquery zTree 树控件异步加载操作
2016/02/25 Javascript
jQuery实现图像旋转动画效果
2016/05/29 Javascript
Vue自定义指令介绍(2)
2016/12/08 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
vue项目优化之通过keep-alive数据缓存的方法
2017/12/11 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
[02:17]2016国际邀请赛中国区预选赛VG战队领队采访
2016/06/26 DOTA
python编写的最短路径算法
2015/03/25 Python
python学生管理系统代码实现
2020/04/05 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
numpy库reshape用法详解
2020/04/19 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
 Alo Yoga官网:购买瑜伽服装
2018/06/17 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
error和exception有什么区别
2012/10/02 面试题
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
Java软件工程师综合面试题笔试题
2013/09/08 面试题
生物制药专业求职信
2014/03/11 职场文书
贺卡寄语大全
2014/04/11 职场文书
学习十八大宣传标语
2014/10/09 职场文书
2015年妇女工作总结
2015/05/14 职场文书
基于flask实现五子棋小游戏
2021/05/25 Python
Python 统计序列中元素的出现频度
2022/04/26 Python
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers