**和*同时解包操作符,只是用途不同,**用于解包字典,*用于解包可迭代对象(列表,元组等)
**在函数定义中,用于将多余的参数组合成一个元组,*在函数定义中,用于将多余的参数组合成一个字典
一、**
情况一:**用于解包字典
示例:
data = {'x': 1, 'y': 2}
print(**data) # 等价于 x=1, y=2
情况二:**在函数定义中,将函数多余传入的参数组合成一个字典
示例:
def my_func(a, b, **kwargs):
print(a, b)
print(kwargs)
my_func(1, 2, x=3, y=4, z=5)
# 输出:
# 1 2
# {'x': 3, 'y': 4, 'z': 5}
二、*
情况一:*用于解包可迭代对象,比如元组,列表
示例:
# 解包列表或元组
nums = [1, 2, 3]
print(*nums) # 输出: 1 2 3
注意:*只会解包一个维度,比如二维列表,*解包后会形成多个一维列表
示例:
batch = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(*batch) # 输出[1, 2, 3], [4, 5, 6], [7, 8, 9]
情况二:*在函数定义中,将多余参数组合成一个元组
示例:
def my_func(a, b, *args):
print(a, b)
print(args)
my_func(1, 2, 3, 4, 5)
# 输出:
# 1 2
# (3, 4, 5)
三、zip
zip用于将多个可迭代对象对应索引位置组合起来
示例:
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
list3 = [True, False, True]
zipped = zip(list1, list2, list3)
print(list(zipped)) # 输出: [(1, 'a', True), (2, 'b', False), (3, 'c', True)]