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程序
Apr 04 Python
python计算最小优先级队列代码分享
Dec 18 Python
Python中将字典转换为列表的方法
Sep 21 Python
Python设计模式之门面模式简单示例
Jan 09 Python
pandas系列之DataFrame 行列数据筛选实例
Apr 12 Python
对numpy Array [: ,] 的取值方法详解
Jul 02 Python
Django实现单用户登录的方法示例
Mar 28 Python
python 计算数据偏差和峰度的方法
Jun 29 Python
pygame实现俄罗斯方块游戏(AI篇2)
Oct 29 Python
python实现俄罗斯方块游戏(改进版)
Mar 13 Python
Python函数参数分类原理详解
May 28 Python
python 进程池pool使用详解
Oct 15 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
福利彩票幸运号码自动生成器
2006/10/09 PHP
isset和empty的区别
2007/01/15 PHP
php 生成饼图 三维饼图
2009/09/28 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
yii2.0实现创建简单widgets示例
2016/07/18 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
jquery异步请求实例代码
2011/06/21 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
js计算任意值之间随机数的方法
2015/01/16 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
详解JS数值Number类型
2018/02/07 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
2018/09/30 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
JS实现选项卡效果的代码实例
2019/05/20 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
vue 路由子组件created和mounted不起作用的解决方法
2019/11/05 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
Python中内建函数的简单用法说明
2016/05/05 Python
Python-OpenCV基本操作方法详解
2018/04/02 Python
python正则表达式之对号入座篇
2018/07/24 Python
Python类super()及私有属性原理解析
2020/06/15 Python
解决python运行效率不高的问题
2020/07/20 Python
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
女方离婚起诉书
2015/05/18 职场文书
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers