前言 上篇文章将了python多态,类属性等知识,这篇文章了解一下python的三器一包:迭代器、生成器、装饰器和闭包 一、迭代器 Python的迭代器是一个重要的概念,特别是在处理序列数据和流数据时。...(三)创建迭代器 可以通过实现__iter__()和__next__()方法来手动创建一个迭代器。也可以通过iter()函数将一个可迭代对象转换为迭代器。...生成器的关键特性包括: 惰性求值:生成器不会一次性生成所有值,而是按需生成,这对于处理大数据集或无限序列非常有用。...惰性求值:生成器只有在需要时才计算值,提高了效率,尤其是处理需要延迟计算的场景。...(七)生成器和列表对比 特性 生成器 列表 内存使用 按需生成,节省内存 一次性加载所有元素,占用大量内存 执行方式 惰性求值,逐步生成 立即求值,一次性生成所有元素 适用场景 大数据集、流数据 小数据集
装饰器在Python中提供类似于注解使用方式,直接使用@装饰器名就是调用已经写好的装饰器对现有方法进行装饰,同时python语言已经内置了大量已经实现好的装饰器。...,但它只能提供给你一个执行的接口,这就牵扯到的另一个特性:惰性求值。...惰性求值这点,我不是很赞同,下面是我关于闭包的看法。 首先,闭包具有一定程度的封装性,内嵌函数只能通过外层函数的接口传递参数并访问。...装饰器类一样是通过将函数作为参数传递,并作为返回值返回来实现的。...参考文献 装饰器模式(Decorator Pattern) 装饰器-廖雪峰的Python教程 Python cookbook: 第九章元编程 面试Python高频问题
因此在程序中我们经常需要这样的一个函数对象——闭包,来帮我们完成一个通用的功能,比如后面会提到的——装饰器。 3....使用闭包 第一种场景 ,在python中很重要也很常见的一个使用场景就是装饰器,Python为装饰器提供了一个很友好的“语法糖”——@,让我们可以很方便的使用装饰器,装饰的原理不做过多阐述,简言之你在一个函数...这是个简单的例子,稍微复杂点可以有多个闭包,比如经常使用的那个LRUCache的装饰器,装饰器上可以接受参数@lru_cache(expire=500)这样。...第二个场景 ,就是基于闭包的一个特性——“惰性求值”。...query("select name from user_app") if time > now: print result # 这时才执行数据库访问 上面这个不太恰当的例子展示了通过闭包完成惰性求值的功能
1.2 惰性求值与及早求值 惰性求值:只描述Stream,操作的结果也是Stream,这样的操作称为惰性求值。惰性求值可以像建造者模式一样链式使用,最后再使用及早求值得到最终结果。...及早求值:得到最终的结果而不是Stream,这样的操作称为及早求值。 2、常用的流 2.1 collect(Collectors.toList()) 将流转换为list。...惰性求值。 比如我们筛选出出身高小于180的同学。...list转换为Stream,再通过flatMap将两个流合并为一个。...、ostClass2转换为Stream StreamclassStream = Stream.of(ostClass1, ostClass2); OutstandingClass
有什么问题或资源分享欢迎大家后台留言或添加微信 1. xrange() 和 range() 的区别,等价于 Python3 与 Python2 中 range() 的区别 Python2 中的 range...然后详细解释 Python 中的 GIL 概念。...答案要点,要知道在 Python 中,函数是一等公民。函数里可以有函数,内部函数里会引用到外部函数的变量,这就是闭包。闭包的应用场景:比如在装饰器里就用到了闭包,还有一种应用场景就是惰性求值等。...这部分内容后面会用专门分专题进行总结 10、如何实现 1~100 的求和 sum(range(1, 101)) 11、functools.wrap() 有什么作用 我们在使用装饰器的过程中,会损失一些被装饰对象原有的一些功能信息...装饰器之后也会分专题介绍。 ? 愿关注我们的人都能找到 属于自己的皮球
1.2 惰性求值与及早求值 惰性求值:只描述Stream,操作的结果也是Stream,这样的操作称为惰性求值。惰性求值可以像建造者模式一样链式使用,最后再使用及早求值得到最终结果。...及早求值:得到最终的结果而不是Stream,这样的操作称为及早求值。 2、常用的流 2.1 collect(Collectors.toList()) 将流转换为list。...惰性求值。 比如我们筛选出出身高小于180的同学。...list转换为Stream,再通过flatMap将两个流合并为一个。...、ostClass2转换为Stream Stream classStream = Stream.of(ostClass1, ostClass2);
1.2 惰性求值与及早求值 惰性求值:只描述Stream,操作的结果也是Stream,这样的操作称为惰性求值。惰性求值可以像建造者模式一样链式使用,最后再使用及早求值得到最终结果。...及早求值:得到最终的结果而不是Stream,这样的操作称为及早求值。 2、常用的流 2.1 collect(Collectors.toList()) 将流转换为list。...惰性求值 ?...2.4 flatMap 将多个Stream合并为一个Stream。惰性求值 ?...list转换为Stream,再通过flatMap将两个流合并为一个。
封面图片:《Python程序设计基础(第2版)》,董付国,清华大学出版社 =============== 常用Python标准库对象速查表(1) 标准库对象简要说明mathsin(x)、cos(x)、...combinations(iterable, r)返回包含从iterable中任选r个不重复元素的所有组合的惰性求值对象combinations_with_replacement(iterable, r...)返回包含从iterable中任选r个元素(允许重复)的所有组合的惰性求值对象count(start=0, step=1)返回包含无限个从start开始且以step为步长的整数的惰性求值对象cycle(...iterable)返回包含iterable中所有元素首尾相接无限循环的惰性求值对象groupby(iterable, key=None)按照key参数描述的规则对iterable中的所有元素进行分组permutations...(iterable[, r])返回包含从iterable中任选r个不重复元素的所有排列的惰性求值对象product(*iterables, repeat=1)计算多个序列中元素的笛卡儿积calendarisleap
本文将介绍迭代器和生成器的概念,以及它们如何成为Python中的秘密武器,提高程序的效率。...迭代器(Iterators)在Python中,迭代器是一种用于迭代的对象,可以逐个访问集合中的元素,而无需提前将整个集合加载到内存中。...: 由于迭代器和生成器是惰性求值的,它们不会一次性加载整个集合到内存中,而是按需生成数据,从而大大减少了内存消耗。...注意异常处理在使用迭代器和生成器时,需要特别注意异常处理。由于迭代器和生成器是惰性求值的,可能会在迭代过程中抛出异常,因此需要确保在合适的地方捕获异常并进行处理,以避免程序意外终止。5....使用缓存装饰器对于一些计算密集型的函数,我们可以使用缓存装饰器来避免重复计算,从而提高程序的性能。缓存装饰器可以将函数的输入和输出缓存起来,当相同的输入再次出现时,直接返回缓存的结果,而不必重新计算。
领取专属 10元无门槛券
手把手带您无忧上云