Python中的 *(星号)和 **(双星号)完全详解
在Python编程中,*(单星号)和**(双星号)是两个非常重要的概念,它们常用于函数定义和调用。接下来,我们将用大白话来详细解释这两个符号的用途和使用场景。
一、单星号(*)
1. 用于函数参数
单星号*可以用来接受可变数量的位置参数。这意味着你可以在调用函数时传入任意数量的参数。
def my_func(*args):
for arg in args:
print(arg)
my_func(1, 2, 3) # 输出: 1 2 3
my_func('a', 'b') # 输出: a b
在上面的例子中,*args接收了所有传入的参数,并将它们放入一个元组中。你可以通过遍历这个元组来访问每一个参数。
2. 用于解包列表或元组
当你有一个列表或元组需要传递给函数时,可以使用单星号进行解包。
my_list = [1, 2, 3]
my_func(*my_list) # 输出: 1 2 3
在这里,*my_list将列表中的元素逐个传递给my_func。
3. 用于限制位置参数
在函数定义中,如果你在某个参数前面加上*,那么该参数后面的所有参数都必须以关键字方式提供。
def my_func(a, b, *, c):
print(a, b, c)
my_func(1, 2, c=3) # 输出: 1 2 3
# my_func(1, 2, 3) # 会报错,因为c必须指定为关键字参数
二、双星号(**)
1. 用于函数参数
双星号**用于接受可变数量的关键字参数。这意味着你可以传入多个键值对,Python会将其存储到一个字典中。
def my_func(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
my_func(name='Alice', age=25)
# 输出:
# name: Alice
# age: 25
2. 用于解包字典
当你有一个字典需要传递给函数时,可以使用双星号进行解包。
my_dict = {'name': 'Bob', 'age': 30}
my_func(**my_dict)
# 输出:
# name: Bob
# age: 30
这里,**my_dict将字典中的每个键值对作为关键字参数传递给my_func。
3. 用于合并字典
在Python 3.5及以上版本,你可以使用双星号合并字典。
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
merged_dict = {**dict1, **dict2}
print(merged_dict) # 输出: {'a': 1, 'b': 3, 'c': 4}
注意,在合并过程中,如果有重复的键,后面的字典会覆盖前面的。
三、总结
- 单星号
*主要用于处理可变数量的位置参数和列表/元组的解包。 - 双星号
**主要用于处理可变数量的关键字参数和字典的解包。
掌握这两个符号的用法,可以让你的代码更加灵活和简洁!希望这篇文章能够帮助你更好地理解Python中的*和**。

浙公网安备 33010602011771号