python 有两种解包运算符,分别是 *
和 **
。
一、*
运算符
*
运算符可以将元组、列表或其他可迭代对象中的元素解包为单独的元素。例如:
numbers = (1, 2, 3)
print(*numbers) # 输出:1 2 3
names = ['zhangsan', 'lisi', 'wangwu']
print(*names) # 输出:zhangsan lisi wangwu
利用 *
运算符,可以实现列表的拼接:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
# 使用 * 将两个列表合并
merged_list = [*list1, *list2]
print(merged_list) # 输出:[1, 2, 3, 4, 5, 6]
二、**
运算符
**
运算符是专门用来解包字典(dict)类型的,它可以将将字典中的键值对作为关键字参数传递给函数:
def print_person_info(name, age):
print(f"Name: {name}, Age: {age}")
person = {'name': 'zhangsan', 'age': 30}
# 使用 ** 解包字典键值对
print_person_info(**person) # 输出: Name: zhangsan, Age: 30
# 等效于下面这行
print_person_info(name='zhangsan', age=30)
**person
完全等价于 name='zhangsan', age=30
,也就是当使用 **
解包字典时,我们就可以这么替换来理解。比如,可以使用 **
进行格式化输出:
person = {'name': 'zhangsan', 'age': 30}
formatted_string = "{name} is {age} years old".format(**person)
# 等价于:formatted_string = "{name} is {age} years old".format(name='zhangsan', age=30)
print(formatted_string) # zhangsan is 30 years old
三、当 *
和 **
在函数的定义中
前面说 *
和 **
是解包运算符,但是当它们出现在函数定义中时,就变成了打包运算符。参考我的另一篇文章:【python基础】用*args和**kwargs来接收任意数量的参数