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设置tmpfs来加速项目的教程
Apr 17 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 Python
python matplotlib 在指定的两个点之间连线方法
May 25 Python
Python 查找list中的某个元素的所有的下标方法
Jun 27 Python
使用Python正则表达式操作文本数据的方法
May 14 Python
我就是这样学习Python中的列表
Jun 02 Python
python set集合使用方法解析
Nov 05 Python
wxPython电子表格功能wx.grid实例教程
Nov 19 Python
django xadmin action兼容自定义model权限教程
Mar 30 Python
Django微信小程序后台开发教程的实现
Jun 03 Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 Python
再谈python_tkinter弹出对话框创建
Mar 20 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
《神奇女侠:血脉》神力女超人大战犯罪公司
2020/04/09 欧美动漫
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
PHP树-不需要递归的实现方法
2016/06/21 PHP
PHP7 新增常量
2021/03/09 PHP
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
JavaScript实现图片无缝滚动效果
2017/07/07 Javascript
微信小程序之页面拦截器的示例代码
2017/09/07 Javascript
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
webpack4 + react 搭建多页面应用示例
2018/08/03 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
js制作提示框插件
2020/12/24 Javascript
js canvas实现五子棋小游戏
2021/01/22 Javascript
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
python创建一个最简单http webserver服务器的方法
2015/05/08 Python
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
零基础学python应该从哪里入手
2020/08/11 Python
python 使用建议与技巧分享(四)
2020/08/18 Python
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
甜品店的创业计划书范文
2014/01/02 职场文书
求职信范文怎么写
2014/01/29 职场文书
小学作文评语大全
2014/04/21 职场文书
2014年合同管理工作总结
2014/12/02 职场文书
赔偿协议书
2015/01/27 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
elementui的el-popover修改样式不生效的解决
2021/06/30 Javascript