全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-19 6 分钟 ✍️ juanwangdev

Python关键字可变参数

使用 **kwargs 接收任意数量的关键字参数,参数以字典形式存储。

基本语法

定义关键字可变参数

Python
def show_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

show_info(name="Alice", age=25, city="Beijing")
# name: Alice
# age: 25
# city: Beijing

kwargs 本质是字典

Python
def show_type(**kwargs):
    print(type(kwargs))  # dict
    print(kwargs)

show_type(a=1, b=2)  # {'a': 1, 'b': 2}

混合使用

完整参数顺序

Python
def func(pos1, pos2, *args, default=10, **kwargs):
    print(f"pos1={pos1}, pos2={pos2}")
    print(f"args={args}, default={default}")
    print(f"kwargs={kwargs}")

func(1, 2, 3, 4, default=20, name="Alice", age=25)
# pos1=1, pos2=2
# args=(3, 4), default=20
# kwargs={'name': 'Alice', 'age': 25}

顺序规则

Python
位置参数 → *args → 默认参数 → **kwargs

参数解包

字典解包为关键字参数

Python
def create_user(name, age, city):
    print(f"{name}, {age}, {city}")

user_info = {"name": "Alice", "age": 25, "city": "Beijing"}
create_user(**user_info)  # Alice, 25, Beijing

# 等价于
create_user(name="Alice", age=25, city="Beijing")

结合解包

Python
def process(a, b, *args, **kwargs):
    print(f"a={a}, b={b}, args={args}, kwargs={kwargs}")

values = [1, 2, 3, 4]
options = {"x": 10, "y": 20}

process(*values, **options)
# a=1, b=2, args=(3, 4), kwargs={'x': 10, 'y': 20}

实际应用

配置处理

Python
def configure(**settings):
    defaults = {"host": "localhost", "port": 3306}
    config = {**defaults, **settings}  # 合并配置
    return config

print(configure(port=3307, user="admin"))
# {'host': 'localhost', 'port': 3307, 'user': 'admin'}

函数包装器

Python
def wrapper(func, **kwargs):
    print(f"Arguments: {kwargs}")
    return func(**kwargs)

wrapper(print, sep="-", end="!\n")  # Arguments: {'sep': '-', 'end': '!\n'}

构建字典

Python
def build_dict(**kwargs):
    return kwargs

result = build_dict(a=1, b=2, c=3)
print(result)  # {'a': 1, 'b': 2, 'c': 3}

动态属性设置

Python
class Person:
    def set_attributes(self, **attrs):
        for key, value in attrs.items():
            setattr(self, key, value)

p = Person()
p.set_attributes(name="Alice", age=25)
print(p.name, p.age)  # Alice 25

注意事项

不能直接修改 kwargs

Python
def modify_kwargs(**kwargs):
    # kwargs 是字典,可修改,但不影响外部
    kwargs["new_key"] = "new_value"
    return kwargs

original = {"a": 1}
result = modify_kwargs(**original)
print(original)  # {'a': 1} - 不受影响
print(result)    # {'a': 1, 'new_key': 'new_value'}

键必须是字符串

text
def func(**kwargs):
    pass

# 正确:键是字符串
func(name="Alice")

# 错误:键不是字符串
# func(**{1: "value"})  # TypeError

要点总结

  1. **kwargs 接收任意数量关键字参数,形成字典
  2. 调用时使用 ** 解包字典为关键字参数
  3. 参数顺序:位置 → *args → 默认 → **kwargs
  4. 字典解包键必须是字符串
  5. 常用于配置处理、动态属性设置等场景

📝 发现内容有误?点击此处直接编辑

← 上一篇 Python位置参数与关键字参数
下一篇 → Python函数定义与调用
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库