时间:2021-08-02 | 标签: | 作者:Q8 | 来源:网络
小提示:您能找到这篇{Python 高级编程:完全理解生成器}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的Python 高级编程:完全理解生成器内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您! |
生成器是 Python 初级开发者最难理解的概念之一,虽被认为是 Python 编程中的高级技能,但在各种项目中可以随处见到生成器的身影,你得不得去理解它、使用它、甚至爱上它。 提到生成器,总不可避免地要把迭代器拉出来对比着讲,生成器就是一个在行为上和迭代器非常类似的对象,如果把迭代器比作 Android 系统,那么生成器就是 iOS,二者功能上差不多,但是生成器更优雅。 什么是迭代器顾名思义,迭代器就是用于迭代操作(for 循环)的对象,它像列表一样可以迭代获取其中的每一个元素,任何实现了 __next__ 方法 (python2 是 next)的对象都可以称为迭代器。 它与列表的区别在于,构建迭代器的时候,不像列表把所有元素一次性加载到内存,而是以一种延迟计算(lazy evaluation)方式返回元素,这正是它的优点。比如列表含有中一千万个整数,需要占超过400M的内存,而迭代器只需要几十个字节的空间。因为它并没有把所有元素装载到内存中,而是等到调用 next 方法时候才返回该元素(按需调用 call by need 的方式,本质上 for 循环就是不断地调用迭代器的next方法)。 以斐波那契数列为例来实现一个迭代器:
什么是生成器知道迭代器之后,就可以正式进入生成器的话题了。普通函数用 return 返回一个值,和 Java 等其他语言是一样的,然而在 Python 中还有一种函数,用关键字 yield 来返回值,这种函数叫生成器函数,函数被调用时会返回一个生成器对象,生成器本质上还是一个迭代器,也是用在迭代操作中,因此它有和迭代器一样的特性,唯一的区别在于实现方式上不一样,后者更加简洁 最简单的生成器函数:
func 就是一个生成器函数,调用该函数时返回对象就是生成器 g ,这个生成器对象的行为和迭代器是非常相似的,可以用在 for 循环等场景中。注意 yield 对应的值在函数被调用时不会立刻返回,而是调用next方法时(本质上 for 循环也是调用 next 方法)才返回
那为什么要用生成器呢?显然,用生成器在逼格上要比迭代器高几个等级,它没有那么多冗长代码了,而且性能上一样的高效,为什么不用呢?来看看用生成器实现斐波那契数列有多简单。
生成器表达式在前面一期「这样写代码更优雅」的文章里上海财经公关面曾经介绍过列表推导式(list comprehension),生成器表达式与列表推导式长的非常像,但是它俩返回的对象不一样,前者返回生成器对象,后者返回列表对象。
前面已经介绍过生成器的优势,就是迭代海量数据时,显然生成器更合适。
来自:https://juejin.im/post/58c65cc72f301e006bc8e1a6
|
上一篇:Golang必备技巧:接口型函数
下一篇:40个Java集合面试问题和答案
当很多人在烦恼着没有好域名注册、如何注册好域名时,有的域名却在面临着逐渐...
现在到处都能看到各种域名广告到处飞,什么COM域名29元啊,什么注册CN域名送两年...
许多人在注册域名时都很烦恼一件事,那就是现在域名的后缀非常多,而且每一种...
cm域名,cm域名注册,CM域名的特点 cm域名是ICANN分配给位于非洲中西部的喀麦隆共...
tw域名,tw域名怎么样,注册tw域名好不好 tw域名是台湾泛用型英文域名。近年来随...
在历经近十年磨练之后,中文域名以一颗新星之态冉冉升起,迅速风行,为国内人...
低价域名首秀火爆登场 低价域名注册市场一波未平,一波又起。的降价行动俨然成...
据IDC行业数据统计显示,域名注册服务商.wang占用率56.4%, 中文域名、.CN域名新增数...
4月10日上午消息,数据显示,今年3月份以来,CN域名注册量增长迅速,CN域名注册...
如果三年前你和别人说,我教你选择域名主机服务商,肯定会招人白眼。伴随着国...
小提示:您应该对本页介绍的“Python 高级编程:完全理解生成器”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通Python 高级编程:完全理解生成器的相关事宜。
关键词:代码,开发者,