python 中的带*的参数

2025/10/31 python 共 1574 字,约 5 分钟

Python 中的带星号参数(*args / **kwargs)总结

一、*args:接收任意数量的位置参数

def greet(*args):
    print(args)

greet('Alice', 'Bob', 'Charlie')
# 输出: ('Alice', 'Bob', 'Charlie')

📘 *args 会把所有位置参数打包成一个 元组

示例:

def add(*nums):
    return sum(nums)

print(add(1, 2, 3, 4))  # 输出 10

二、**kwargs:接收任意数量的关键字参数

def show_info(**kwargs):
    print(kwargs)

show_info(name='Alice', age=20, city='Paris')
# 输出: {'name': 'Alice', 'age': 20, 'city': 'Paris'}

📘 **kwargs 会把所有关键字参数打包成一个 字典


三、同时使用 *args**kwargs

def demo(a, b, *args, **kwargs):
    print("a:", a)
    print("b:", b)
    print("args:", args)
    print("kwargs:", kwargs)

demo(1, 2, 3, 4, x=10, y=20)
# 输出:
# a: 1
# b: 2
# args: (3, 4)
# kwargs: {'x': 10, 'y': 20}

⚙️ 参数顺序规则:

位置参数 → *args → 关键字参数 → **kwargs

四、星号在函数调用中的“解包”作用

1. * 解包序列

def add(a, b, c):
    print(a + b + c)

nums = [1, 2, 3]
add(*nums)  # 等价于 add(1, 2, 3)

2. ** 解包字典

def greet(name, age):
    print(f"{name} is {age} years old.")

person = {"name": "Alice", "age": 20}
greet(**person)  # 等价于 greet(name='Alice', age=20)

五、仅限关键字参数(keyword-only arguments)

在函数定义中,放一个裸的 *,表示后面的参数必须用关键字方式传入

def user_info(name, *, age, city):
    print(name, age, city)

user_info("Alice", age=18, city="Paris")  # ✅ 正确
user_info("Alice", 18, "Paris")           # ❌ 报错

六、仅限位置参数(positional-only arguments, Python 3.8+)

使用 / 来声明前面的参数必须按位置传入

def add(a, b, /, c):
    print(a + b + c)

add(1, 2, c=3)  # ✅
add(a=1, b=2, c=3)  # ❌ 报错

七、参数定义顺序总结

函数定义中的推荐顺序:

位置参数 → / → 默认参数 → *args → 仅限关键字参数 → **kwargs

八、总结对照表

符号定义位置含义类型
*args函数定义任意数量的位置参数tuple
**kwargs函数定义任意数量的关键字参数dict
*函数定义中后面的参数必须用关键字传入
/函数定义中前面的参数必须用位置传入
*函数调用解包序列
**函数调用解包字典

九、综合示例

def func(a, b=2, *args, c=3, **kwargs):
    print("a =", a)
    print("b =", b)
    print("args =", args)
    print("c =", c)
    print("kwargs =", kwargs)

func(1, 5, 6, 7, c=10, d=20, e=30)

输出:

a = 1
b = 5
args = (6, 7)
c = 10
kwargs = {'d': 20, 'e': 30}

🔑 一句话总结

*** 在函数定义中用来打包参数,在函数调用中用来解包数据结构。 它们让 Python 函数更灵活、更通用。


文档信息

Search

    Table of Contents