大白话聊聊 zip()、chain以及*运算符
在函数参数中用*args ,表示接收任意数量的“位置参数”,并将这些参数打包成一个元组args。pythondef sum_all(*args): # args 会接收所有位置参数,转为元组print(sum_all(1, 2, 3, 4)) # 输出:10(args = (1,2,3,4))注意:chain 和zip 返回的是迭代器比较忙,慌里慌张写下一点,有错别字和不严谨的地方,多多包容。
一、zip
- zip函数呢,就是将多个可迭代对象,按对应的相同下表去做配对(配对但不是只能两个,其实是多个多个相同下表元素的组合),形成多个组合元祖。
-那么问题来了--- 如果多个可迭代对象的长度不一致,怎么办?
-答:以最小的长度为准(因为要保证配对的大小一致)
-返回:一个迭代器 zip object
演示:
这里为了按时多个组合,效果,就使用了三个列表来演示,
而切把可迭代对象却传入zip函数时,我也打乱了顺序。

这里打印结果:
![]()
是一个迭代器,所以考虑转成list列表输出:

得到:

二、chain(itertools.chain)
- itertools工具模块下的工具类
- 作用就是将多个可迭代对象(如列表、元祖..)中的的元素,“无缝串联”成一个迭代器
示例:

运行结果:

三、*运算符
- * 是 Python 中的解包运算符,
- 用法:
-解包可迭代对象
-定义可变参数函数。
用法1:解包可迭代对象(常用场景)
将可迭代对象(如列表、元组、集合)的元素“打散”,作为独立元素传入函数、初始化容器等。
上面的截图感觉效果不太好,下面的演示以插入代码和注释的形式说明
- 示例1:
python
# 1. 函数调用时解包参数
def add(a, b, c):
return a + b + c
nums = [1, 2, 3]
print(add(*nums)) # 等价于 add(1, 2, 3),输出:6
-示例2:
容器初始化时解包元素
list1 = [1, 2]
list2 = [3, 4]
combined = [*list1, *list2] # 等价于 [1, 2, 3, 4]
print(combined) # 输出:[1, 2, 3, 4]
用法2:函数定义时接收可变位置参数
在函数参数中用 *args ,表示接收任意数量的“位置参数”,并将这些参数打包成一个元组 args 。
- 示例:
python
def sum_all(*args): # args 会接收所有位置参数,转为元组
return sum(args)
print(sum_all(1, 2, 3, 4)) # 输出:10(args = (1,2,3,4))
注意:chain 和zip 返回的是迭代器
比较忙,慌里慌张写下一点,有错别字和不严谨的地方,多多包容
更多推荐

所有评论(0)