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中的***

posted @ 2025-11-14 14:28  年少小强  阅读(181)  评论(0)    收藏  举报