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使用Socket(Https)Post登录百度的实现代码
May 18 Python
python检测远程端口是否打开的方法
Mar 14 Python
详解Python的Django框架中manage命令的使用与扩展
Apr 11 Python
解决pycharm无法识别本地site-packages的问题
Oct 13 Python
在Python运行时动态查看进程内部信息的方法
Feb 22 Python
python实现文件助手中查看微信撤回消息
Apr 29 Python
pandas 数据结构之Series的使用方法
Jun 21 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
春节到了 教你使用python来抢票回家
Jan 06 Python
python3.8与pyinstaller冲突问题的快速解决方法
Jan 16 Python
Python中如何引入第三方模块
May 27 Python
基于OpenCV的路面质量检测的实现
Nov 04 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
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
搜索引擎技术核心揭密
2006/10/09 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
php格式文件打开的四种方法
2018/02/24 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
php/JS实现的生成随机密码(验证码)功能示例
2019/06/06 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
详解JavaScript正则表达式之RegExp对象
2015/12/13 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
Python解析json文件相关知识学习
2016/03/01 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
Python Selenium 之数据驱动测试的实现
2019/08/01 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
ipython jupyter notebook中显示图像和数学公式实例
2020/04/15 Python
Python析构函数__del__定义原理解析
2020/11/20 Python
出生医学证明书
2014/09/15 职场文书
学校政风行风评议心得体会
2014/10/21 职场文书
意向协议书
2015/01/27 职场文书
党员读书活动心得体会
2016/01/14 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle