python标准库中的24个生成器函数,个个都超级厉害,你用过几个?

100天精通Python丨黑科技篇 —— 21、大语言模型_100天精通python快速入门到黑科技 ChatGPT 是 OpenAI 推出的一种基于 GPT-3/4 的聊天机器人。chatgpt 的颠覆性影响主要体现在提高语言交流的便捷性、个性化服务、自动化客服和教育娱乐等方面,这些应用可以为用户带来更多的便利和乐趣,同时也为企业提供了更多的服务和商机。本文收录于,是由的硬核博主倾力打造,分基础知识篇和黑科技应用两大部分,欢迎订阅本专栏,订阅后可私聊进Python全栈VIP交流群(问题解答、互相帮助)还可领取20GPython视频和100本互联网行业电子书。 阅读详情

前言

标准库提供了很多生成器,有些是内置的,有些在itertools和functools模块中,下面我们就按照它们的功能进行分组来看看它们吧!

用于过滤的生成器函数

import itertools

# itertools.compress(it,selector_it)
# 并行处理两个可迭代对象,如果selector_it中的元素是真值,产出it中对应的元素
print([i for i in itertools.compress(range(10), [0, 0, 1, 1])])

# itertools.takewhile(predicate,it)
# 使用传入的生成器生成另一个生成器,predicate指定终止条件
print([i for i in itertools.takewhile(lambda n: n < 5, range(10))])

# itertools.dropwhile(prdicate,it)
# 与itertools.takewhile的作用相反
print([i for i in itertools.dropwhile(lambda n: n < 5, range(10))])

# filter(predicate,it)
# 将it中的各个元素传给predicate,如果为真,则产出it中对应的元素
print([i for i in filter(lambda a: a % 2, range(10))])  # 保留奇数

# itertools.filterfalse(predicate,it)
# 与filter的作用相反
print([i for i in itertools.filterfalse(lambda a: a % 2, range(10))])  # 保留偶数

# itertools.islice(it,stop)或者itertools.islice(it,start,stop,step=1)
# 产出it的切片 实现的是惰性操作
print([i for i in itertools.islice(range(10), 2)])
print([i for i in itertools.islice(range(10), 2, 9, 3)])

#end

用于映射的生成器函数

 

import itertools
import fractions
import operator

# itertools.accumulate(it,func)
# 产出累积的总和,如果提供了func,那么把前两个元素传给它,然后把计算的结果和下一个元素传给它,以此类推
print([i for i in itertools.accumulate(range(10), lambda a, b: a + b)])  # 计算前n项的和

# enunerate(it,start=0)
# 产出由两个元素构成的元组 结构是(index,item) index从start开始,每次加一 item的值中it中取
print([i for i in enumerate(range(10), start=10)])

# map(func,iter,[it2,...itn])
# 把it中的各个元素传给func,产出结果,如果传入n个it,func的参数必须有n个
print([i for i in map(lambda a, b, c: a + b + c, range(-10, 0, 1), range(10), range(10, 20))])  # 对it1,it2,it3对应位置的元素进行求和
# itertools.startmap(func,it)
# 把it中的各个元素传给func,产出结果
print([i for i in itertools.starmap(operator.mul, enumerate('hello world', 1))])  # 从1开始,根据字母所在位置,把字母重复相应的次数

 合并多个可迭代对象的生成器函数

import itertools

# itertools.chain(it1,[it2...it2])
# 先产出it1中的元素,然后产出it2中的元素,以此类推,无缝连接在一起
print([i for i in itertools.chain(range(10), range(11, 20), 'hello world')])

# itertools.chain.from_iterable(it)
# 功能同itertools.chain 不过传入的参数的结构有所变化   it的结构:it=[iter1,[iter2...itern]]
print([i for i in itertools.chain.from_iterable([range(10), 'hello'])])

# itertools.product(it1,...itn,repeat=1)
# 计算笛卡尔积,从输入的各个可迭代对象中获取元素,合并成由N个元素组成的元组,与嵌套的for循环效果一样,repeat指明重复处理多少次输入的可迭代对象
print([i for i in itertools.product(range(3), 'hello', 'world', repeat=1)])

# zip(it1,...itn)
# 并行从输入的各个可迭代对象中获取元素,产出由N个元素组成的元组,只要有一个可迭代对象到了头,迭代就终止
print([i for i in zip(range(5), 'hello')])

# zip_longest(it1,..itn,fillvalue=None)
# 与zip作用一样,但是终止条件是最长的可迭代对象到头了才终止,其他可迭代对象空缺的值用fillvalue进行补充
print([i for i in itertools.zip_longest(range(10), 'hello', fillvalue='world')])

 把输入的各个元素扩展成多个输出元素的生成器函数

import itertools

# itertools.combinations(it,out_len)  组合 和顺序无关
# 把it产出的out_len个元素组合在一起,然后产出
print([i for i in itertools.combinations('ABC', 2)])  # 产出两两组合的元素

# itertools.combinations_with_replacement 组合
# 功能同itertools.combinations,但是也包含自己和自己的组合
print([i for i in itertools.combinations_with_replacement('ABC', 2)])

# itertools.count(start=0,step=1)
# 从start开始,以step为步长,不断产出数字
for i in itertools.count(1, 2):
    print(i, end=' ')
    if i > 10: break
print()

# itertools.permutations(it,out_len=len(list(it)))
# 把it产出的out_len个元素排列在一起  排列  和顺序有关
print([i for i in itertools.permutations('ABC', 2)])

# repeat(item,[times])
# 重复不断的产出指定的元素,除非提供times指定次数
print([i for i in itertools.repeat('hello', 10)])

# itertools.cycle(it)
# 从it中产出各个元素,存储各个元素的副本,然后按顺序重复不断地产出各个元素
cy = itertools.cycle('ABC')  # 将it首位相连
while True:
    print(next(cy))
    break

 用于重新排列元素的生成器函数

import itertools

# itertools.groupby(it,key=None)
# 产出由练个元素组成的元素,形式为(key,group),其中key是分组标准,group是生成器,用于产出分组里的元素
strs_list = ['hello', 'world', 'we', 'price', 'the', 'things', 'when', 'we', 'have', 'lost', 'them', '.']
strs_list.sort(key=len)  # 先排序
for key, group in itertools.groupby(strs_list, key=len):  # 根据元素的长度进行分组
    print(key, list(group))

# reversed(seq)
# 从后向前,倒序产出seq seq必须是序列,或者是实现了__reversed__的对象
print(list(reversed(strs_list)))

# itertools.tee(it,n=2)
# 产出一个由n个生成器组成的元组,每个生成器用于单独产出输入的可迭代对象中的元素
g1, g2 = itertools.tee('ABC')
print(list(g1))
print(list(g2))

 

总结

python的大部分的内置功能都是用c实现的,这些生成器函数也不例外,它们不仅功能强大,性能也是相当不错的,因此,掌握它们对你的代码优化上会有不小的帮助哦!

同步更新于个人博客系统:python标准库中的24个生成器函数,个个都超级厉害,你用过几个?

JavaScript 生成器函数(generator)详解:优雅处理异步任务流 Generators 是 JavaScript 中的一种特殊函数,它们可以暂停执行并根据需要生成多个值。通过 yield 关键字,生成器函数可以在每次被调用时产生一个新值,这使得它们非常适合处理大量数据或需要延迟计算的场景。本文将详细介绍 generators 的作用、用法以及与其他语言特性的配合使用。 阅读详情

相关推荐

深入理解Python生成器函数:5个实用示例解析

本文旨在助力大家轻松掌握Python生成器函数。在本文中,我们将深入探究5个实用的生成器函数示例,帮助你透彻理解生成器的工作原理。

1019

生成器函数(generator)

本文详细介绍了生成器函数的相关知识点,包括生成器函数的定义、生成器函数和迭代器的关系、生成器函数的用法、背压模式等内容。本文将详细介绍生成器函数的相关知识点,包括生成器函数的定义、生成器函数和迭代器的关系、生成器函数的用法、背压模式等内容。生成器函数和普通函数的区别在于它可以使用特殊的语法来控制生成器对象的输出,从而实现按需生成值序列,避免一次性生成大量的值,减少了内存占用。生成器函数和迭代器之间具有紧密联系,生成器函数可以创建一个迭代器对象,该对象可以实现可迭代对象的遍历。我们可以使用生成器函数和。

rkcy的博客 7980

springcloud教程 -- 1.快速搭建入门级demo,看这一篇就够了

废话不多讲,跟紧我,开启你的SpringCloud初体验 首先回顾微服务的基本组成: [图片 here] 生产者:提供服务 消费者:消费服务 服务注册/发现中心:服务注册,发现,监控 所以,首先明白springcloud微服务的架构基础:生产者(client),消费者(client),服务注册/发现中心(server)

叶巨岩的博客 8万+

Python函数之生成器

Python函数之生成器

weixin_53860346的博客 1527

保姆级教程:用STM32CubeMX HAL库搞定ESP8266连接,附串口printf调试全流程

本文提供了一份详细的STM32CubeMX HAL库教程,指导开发者如何实现ESP8266无线模块的连接与调试。从开发环境搭建、串口配置到AT指令通信解析,涵盖了物联网开发中的关键步骤和常见问题解决方案,帮助开发者快速掌握STM32与ESP8266的集成技术。

weixin_28273593的博客 504

MiniMax H3 + ComfyUI 工作流搭建指南:从整合包到视频生成

AI视频生成正成为内容创作的新基础设施,而ComfyUI作为可视化工作流引擎,将复杂的模型推理过程拆解为节点与连线,让本地视频生成变得可复用、可批量。理解这一原理后,用户无需编写代码,只需掌握模型加载、提示词控制、采样与解码的基本链路,即可搭建出稳定的视频生产管线。MiniMax H3作为前沿视频生成模型,在ComfyUI中通过权重文件和自定义节点落地,配合整合包可大幅降低环境配置门槛。从硬件评估、目录结构到节点连接与参数调优,本文系统性梳理了从零跑通一条视频生成工作流的完整路径,帮助用户在批量素材生成、风

weixin_29057065的博客 414

Python 可迭代的对象、迭代器 和生成器(标准库中的生成器函数)

(https://docs.python.org/3/library/itertools.html),combinations、combinations_和 permutations 生成器函数,连同 product 函数,称为组合学生成。色的 os.walk 函数(https://docs.python.org/3/library/os.html#os.walk)。示例 14-21 演示 itertools.groupby 函数和内置的 reversed 函数的。后重复产出对象中的元素。

钢铁男儿 815

【实战指南】OpenClaw 使用 Bird Skill 接入 X(Twitter)的终极省心方案:告别每次都要手动喂 Cookie 的痛苦

OpenClaw 使用 Bird Skill 接入 X(Twitter)的终极省心方案:告别每次都要手动喂 Cookie 的痛苦

hampeter的博客 1802

python 标准库中的生成器函数

这一节的示例多次把不同的生成器函数组合在一起使用。这是这些函数的优秀特 性:这些函数的参数都是生成器,而返回的结果也是生成器,因此能以很多不同的方式结 合在一起使用。,产出选中的,计算出的或重新排列的项。在下述几个表格中,我会概述其中的 24个,有些是内置的,有些在。可迭代的对象)中的各个元素上做计算,然后返回结果。标准库提供了很多生成器,有用于逐行迭代纯文本文件的对象,还有出色的。,每个生成器都可以产出输入的各个元素。,会应用到输入中的每个元素上,用于判断元素是否包含在输出中。处理输入的各个可迭代对象。

MZP_man的博客 483

基于Q-learning的无人机三维路径规划(含完整C++代码)

基于Q-learning的无人机三维路径规划(含完整C++代码)

weixin_54186646的博客 1万+

用群辉NAS打造影视墙(Jellyfin篇)

之前的文章提到过,用群辉NAS组建影视播放系统可以采用官方提供的Video Station套件,不过影视信息配比较差,响应速度也欠佳,今天我们就聊聊别的套件。在影音媒体方面,常见的还有Emby、Plex、Jellyfin。本文主讲Jellfin的原因是它胜在免费,而且功能比较齐全,完全够用。详细信息可以参考Jellyfin的官网:https://jellyfin.org/

dgnankai的专栏 7323

掌握这24个Python生成器函数,数据处理效率翻倍!

✨ 内存高效:处理TB级数据不爆内存⚡ 延迟计算:按需生成减少无效运算🧩 组合自由:管道式拼接数据处理流程📊 代码简洁:替代多重循环的声明式写法正如《流畅的Python》所言:“生成器是构建数据流管道的理想组件”。

钢铁男儿 509

(五)深入理解Bluez协议栈之“GATT Server Profile”

上一篇介绍Bluez协议栈的了GAP Profile的实现,本章节我们继续介绍GATT Profile的实现,参考的程序是Peripheral。通过阅读它的实现代码可以发现,它广播部分是通过mgmt来实现的,然后在初始化完成之后,创建了一个L2CAP类型的socket,来负责实现GATT Server的逻辑。

1142

标准库中的生成器函数

用于过滤的生成器函数 1、itertools.compress(it, selector_it) 并行处理两个可迭代对象;如果select_it中的元素是真值,产出it中对应的元素 2、itertools.dropwhile(predicate, it) 处理it,跳过predicate的计算结果为真值的元素,然后产出剩下的各个元素 3、filter(predicate, it) 把i...

weixin_30925411的博客 234

Lumerical 教程目录,说明及个人感悟(共计138篇,持续更新中)

Lumerical---教程说明及个人感悟

u011699626的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

用python实现分段函数_python分段函数

广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!segmentation fault (core dumped) python脚本: #! usrbinenv python import ctypesimport osimport sys # linux machine codebuf +=xbdxfcxa1x5dx63xd9xe...

weixin_39630466的博客 6136

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Python中的生成器

1、生成器 通过一致的方式遍历序列,例如列表中的对象或者文件中的一行行内容,这是python的一个重要特性。这个特性是通过 迭代器协议 来实现的,迭代器协议 是一种令对象可遍历的通用方式。比如,遍历一个字典,获得字典的键: dict_1 ={'a':1,'b':2,'c':3} for key in dict_1: print(key) a b c 当你写下 for key in di...

格陵Lan丶 142

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Python标准库sys常用函数、方法及代码实战解析

在Python的标准库中,`sys` 模块是一个常用而强大的工具,它提供了与Python解释器交互的函数和变量。本文将介绍`sys`模块的一些常用函数和方法,并通过实际的代码实例来解析它们的用法。

一键难忘的博客 5384

Python 标准库介绍

Python标准库提供了丰富的内置模块和工具,涵盖文本处理、二进制数据、数学运算、文件操作、加密、并发编程、网络通信等核心功能。这些模块既有C编写的高效底层实现,也有Python编写的跨平台解决方案。标准库支持字符串处理、正则表达式、日期时间、数据结构、文件压缩、数据库访问等常见任务,同时还包含网络协议、多媒体处理、GUI开发等高级功能。此外,Python还提供了完善的开发工具链,包括测试框架、调试工具、虚拟环境管理等。标准库的模块化设计使开发者能够快速构建各类应用程序,而其跨平台特性确保了代码的可移植性。

人无远虑,必有近忧 3909

python 迭代器、生成器、yield、iter

文章目录1. 迭代器2. 生成器3. 标准库3.1 过滤3.2 映射3.3 合并3.4 排列组合3.5 重新排列4. yield from5. 可迭代的归约函数6. iter 还可以传入2个参数7. 生成器当成协程 learn from 《流畅的python》 1. 迭代器 所有生成器都是迭代器,因为生成器完全实现了迭代器接口 序列可以迭代的原因:iter函数,解释器需要迭代对象 x 时,会自动调用 iter(x) 内置的 iter:先检查是否实现了 __iter__,不然,检查是否实现 __getite

Michael是个半路程序员 1132

python中的生成器、包和模块

1.生成器 如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从⽽节省⼤量的空间。在Python中,这种⼀边循环⼀边计算的机制,称为⽣成器(Generator)。 生成器具有延迟计算、惰性求值的特点。相较于包含大量数据的list来说,大大节省了内存且运行高效。但是无法随时存取。 ⽣成器(Generator)⽣成器会产⽣⼀个对象,...

ForsetiRe的博客 373

python string库函数_Python 标准库学习 --- string

更多精彩,关注微信公众号:Python 高效编程想要代码写得好,除了参与开源项目、在大公司实习,最快捷高效的方法就是阅读 Python 标准库。学习 Python 标准库,不是背诵每一个标准库的用法,而是要过一遍留下印象,挑自己感兴趣的库重点研究。这样实际做项目的时候,我们就可以游刃有余地选择标准库。作为这一系列的开始,第一个学习的是 string 模块。string 模块作为内置函数 str 的...

weixin_39815310的博客 976

《100天学习Python:从入门到精通》——第3天:Python标准库

Python关键字是指在Python编程语言中具有特殊含义和功能的保留字。这些关键字不能作为变量名、函数名或其他标识符使用。Python关键字是区分大小写的,即所有关键字都必须以小写字母书写。函数名作用abs返回一个数的绝对值all判断可迭代对象中所有元素是否为真any判断可迭代对象中是否存在一个元素为真ascii返回一个可打印对象的可打印字符串表示bin将整数转换为二进制字符串bool将一个值转换为布尔值(True 或 False)bytearray返回一个新的字节数组。

qq_42716068的博客 1047

Python 标准库学习 --- string

想要代码写得好,除了参与开源项目、在大公司实习,最快捷高效的方法就是阅读 Python 标准库。学习 Python 标准库,不是背诵每一个标准库的用法,而是要过一遍留下印...

python爬虫人工智能大数据 153

Python函数之三:迭代器和生成器

Python函数之三:迭代器和生成器 一、函数名的运用 函数名是一个特殊的变量,他除了具有变量的功能,还有最主要一个特点就是加上() 就执行,其实他还有一个学名叫第一类对象。 1、指向内存地址 def func(): print('这是一个函数') print(func)#<function func at 0x000002B9AC36D1E0> 函数名指向了内存地址:0x000002B9AC36D1E0 2、当做变量传递 def func(): print('这是一个函数')

qq_35092730的博客 404

python基础:itertools模块常用函数

常用函数及说明compress(data, selectors)#compress('ABCDEF', [1,0,1,0,1,1]) --&gt; A C E Fchain(*iterables)# chain('ABC', 'DEF') --&gt; A B C D E Ffilterfalse(predicate, iterable)# filterfalse(lambda x: x%2, r...

hbu_pig的专栏 1193
上一篇: 《流畅的python》学习笔记之可迭代的对象,迭代器和生成器
下一篇: python3.3中出现的新语法:yield from,有点强?
白日梦想猿
博客等级 码龄6年 216粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值