博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python中的generator对象
阅读量:6231 次
发布时间:2019-06-22

本文共 1039 字,大约阅读时间需要 3 分钟。

title: Python中的generator对象 date: 2017.09.01 23:56 categories:

  • 技术博客 tags:
  • 语言特性
  • Python

编程语言是技术的一个基点,所以不得不说语言也是挺重要的,虽说背后的原理大同小异,但一般来说程序员都有个主力语言,这个主力语言一般是选出来的。

而语言流不流行、强不强原因有很多,以Python为例,原因之一就是其一些优秀的语言特性,或者说语法上的设计,当然跟解释器是配套的。本文就来说一说Python中的generator即生成器对象。

1.基础理论

我推荐廖雪峰大大的官网,我学JavaScript与Python是直接经过他的官网教程来的,十多年的专业程序员,对这点知识点理解相当透彻。

关于Python中generator的基础理论,直接看这篇:。

JavaScript中的跟Python是完完全全一个路子,因为设计者也是学过来的。

综上,generator,生成器,其实就是在OOP的背景下,对于迭代的场景,封装出的特定对象,里面包裹着迭代过程所需要的信息,比如next(),可以借鉴下Java中LinkedList的封装细节,实现手段都是源于技术需求。

2.深入理解

还是看廖雪峰的解释:。

包括Python黄哥的解释:。

同时提供一份PDF文档,英文,我给个下载链接:。

划下PDF中的重点,首先他这个解释其实是最好的,我在看完中文的理解后再看到这个有一种豁然开朗的感觉,因为他里面包括了这几个重点:

  • Python中栈帧并不分配在栈内存中(Java中相反),而是在堆中
  • CPython解释器遇到yield关键字时,会主动封装好此时需要返回的generator(PDF中使用dis模块的接口进行了细节分析)
  • generator存储的信息包括了局部与全局变量,在栈帧中也保存着堆对象调用需要的指针位置

综上,在会使用generator的前提下,可以理解到底层算法的实现,也能体会到设计的优雅之处。对于我们理解使用代码、算法实现思路都有启发。

3.优点

  • 优化了性能 在大量迭代数据时,只需要用中间值的场景
  • 简化了写法 yield关键字从语法层面进行了支持,而generator对象自带的接口也进行了对应的功能拓展
  • 体现语言设计的独特、优雅

4.小结

综上,我们对Python中的generator由浅入深,从知道到使用再到理解设计用意。过程的积累是我在乎的。

结尾套用一句俗话:人生苦短,快用Python。

转载地址:http://gyena.baihongyu.com/

你可能感兴趣的文章
word文档的动态添加数据
查看>>
模仿ReentrantLock类自定义锁
查看>>
Redis进阶实践之九 独立封装的RedisClient客户端工具类
查看>>
如何在Python中从零开始实现随机森林
查看>>
动态规划-最优二叉搜索树-公式推导
查看>>
jquery获取前一个月日期
查看>>
R12.2常用手册
查看>>
【全网最全的博客美化系列教程】01.添加Github项目链接
查看>>
[微信小程序] 通过快速启动demo分析小程序入门关键点
查看>>
C# 封装miniblink 使用HTML/CSS/JS来构建.Net 应用程序界面和简易浏览器
查看>>
SQL Server管理员必备技能之性能优化
查看>>
组合拳出击-Self型XSS变废为宝
查看>>
服务网与各地落地平台的调用关系
查看>>
使用VAE、CNN encoder+孤立森林检测ssl加密异常流的初探——真是一个忧伤的故事!!!...
查看>>
13个在企业中持上升势头的开源编程工具
查看>>
sql server 2005附加数据库错误:尝试打开或创建物理文件时,CREATE FILE 遇到操作系统错误...
查看>>
彻底搞定C指针-函数名与函数指针
查看>>
win7快速启动栏
查看>>
一个网络项目招标书,大神们会几个?
查看>>
基于x86和JVM浅谈32bit与64bit的区别
查看>>