python之yield和Generator深入解析


Posted in Python onSeptember 18, 2019

首先我们从一个小程序导入,各定一个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 初始化多维数组代码
Sep 06 Python
python实现微信接口(itchat)详细介绍
Oct 23 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
Feb 11 Python
Python中几种属性访问的区别与用法详解
Oct 10 Python
如何利用Python分析出微信朋友男女统计图
Jan 25 Python
python 批量添加的button 使用同一点击事件的方法
Jul 17 Python
pygame实现贪吃蛇游戏(上)
Oct 29 Python
Python3将jpg转为pdf文件的方法示例
Dec 13 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
Mar 16 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
Dec 29 Python
python - timeit 时间模块
Apr 06 Python
利用Python实现翻译HTML中的文本字符串
Jun 21 Python
PyTorch预训练的实现
Sep 18 #Python
用python实现英文字母和相应序数转换的方法
Sep 18 #Python
Django模板导入母版继承和自定义返回Html片段过程解析
Sep 18 #Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
Sep 18 #Python
python rsa实现数据加密和解密、签名加密和验签功能
Sep 18 #Python
决策树剪枝算法的python实现方法详解
Sep 18 #Python
python生成requirements.txt的两种方法
Sep 18 #Python
You might like
DOMXML函数笔记
2006/10/09 PHP
FleaPHP的安全设置方法
2008/09/15 PHP
destoon复制新模块的方法
2014/06/21 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
LNMP部署laravel以及xhprof安装使用教程
2017/09/14 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
关于使用runtimeStyle属性问题讨论文章
2007/03/08 Javascript
Firefox outerHTML实现代码
2009/06/04 Javascript
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
jQuery 中国省市两级联动选择附图
2014/05/14 Javascript
js带缩略图的图片轮播效果代码分享
2015/09/14 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
js实现京东轮播图效果
2017/06/30 Javascript
js实现简单分页导航栏效果
2019/06/28 Javascript
Python异常处理总结
2014/08/15 Python
Python利用前序和中序遍历结果重建二叉树的方法
2016/04/27 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
解决Python3中的中文字符编码的问题
2018/07/18 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
2019/08/26 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
keras中的backend.clip用法
2020/05/22 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
英国在线电子和小工具商店:TecoBuy
2018/10/06 全球购物
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
工商管理专业职业生涯规划
2014/01/01 职场文书
财务简历的自我评价
2014/03/05 职场文书
丽江古城导游词
2015/02/03 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
python 提取html文本的方法
2021/05/20 Python
怎么用Python识别手势数字
2021/06/07 Python
Python+tkinter实现高清图片保存
2022/03/13 Python
Linux中文件的基本属性介绍
2022/06/01 Servers