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 执行字符串表达式函数(eval exec execfile)
Aug 11 Python
python中MySQLdb模块用法实例
Nov 10 Python
机器学习10大经典算法详解
Dec 07 Python
简单实现python进度条脚本
Dec 18 Python
Python使用wxPython实现计算器
Jan 30 Python
python读写csv文件并增加行列的实例代码
Aug 01 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
Oct 30 Python
Python GUI库PyQt5样式QSS子控件介绍
Feb 25 Python
python打开文件的方式有哪些
Jun 29 Python
Python实现一个简单的递归下降分析器
Aug 01 Python
详解使用scrapy进行模拟登陆三种方式
Feb 21 Python
深度学习详解之初试机器学习
Apr 14 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
php设置编码格式的方法
2013/03/05 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
通过代码实例解析PHP session工作原理
2020/12/11 PHP
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
js 处理数组重复元素示例代码
2013/12/27 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
JavaScript中window.showModalDialog()用法详解
2014/12/18 Javascript
javascript随机显示背景图片的方法
2015/06/18 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
2017/01/21 Javascript
js以及jquery实现手风琴效果
2020/04/17 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
python异步存储数据详解
2019/03/19 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
2019/04/29 Python
Python获取数据库数据并保存在excel表格中的方法
2019/06/12 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
土耳其时尚潮流在线购物网站:Trendyol
2017/10/10 全球购物
前台接待员岗位职责
2014/01/02 职场文书
初一科学教学反思
2014/01/27 职场文书
军训感想500字
2014/02/20 职场文书
结婚周年感言
2014/02/24 职场文书
公司活动方案范文
2014/03/06 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
广告宣传策划方案
2014/05/21 职场文书
党性心得体会
2014/09/03 职场文书
工程部主管岗位职责
2015/02/12 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
python实现黄金分割法的示例代码
2021/04/28 Python
Go 语言下基于Redis分布式锁的实现方式
2021/06/28 Golang
尝试使用Python爬取城市租房信息
2022/04/12 Python