当前位置:首页 > Python > 正文

Python收集参数教程:深入理解*args和**kwargs的用法 | Python编程技巧

Python收集参数完全指南:掌握*args和**kwargs的用法

什么是收集参数?

在Python中,收集参数是一种特殊的函数参数声明方式,允许函数接收任意数量的参数。主要包含两种形式:

  • *args:收集任意数量的位置参数
  • **kwargs:收集任意数量的关键字参数

1. *args 的使用方法

*args 将接收到的所有位置参数打包成一个元组

def sum_numbers(*args):
    total = 0
    print("参数类型:", type(args))  # <class 'tuple'>
    for num in args:
        total += num
    return total

print(sum_numbers(1, 2, 3))       # 输出: 6
print(sum_numbers(10, 20, 30, 40)) # 输出: 100

特点:

  • 参数名前加单个星号 *
  • 接收的参数被存入元组
  • 函数调用时使用位置参数传递

2. **kwargs 的使用方法

**kwargs 将接收到的关键字参数打包成一个字典

def print_user(**kwargs):
    print("参数类型:", type(kwargs))  # <class 'dict'>
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_user(name="Alice", age=30, job="Engineer")
# 输出:
# name: Alice
# age: 30
# job: Engineer

特点:

  • 参数名前加双星号 **
  • 接收的参数被存入字典
  • 函数调用时使用关键字参数传递

3. 组合使用 *args 和 **kwargs

在函数中同时使用两种收集参数时,必须遵守顺序:

def combined_example(name, *args, **kwargs):
    print(f"固定参数: {name}")
    print(f"位置参数: {args}")
    print(f"关键字参数: {kwargs}")

combined_example("Bob", 1, 2, 3, city="Beijing", country="China")
# 输出:
# 固定参数: Bob
# 位置参数: (1, 2, 3)
# 关键字参数: {'city': 'Beijing', 'country': 'China'}

参数顺序规则:

  1. 普通位置参数
  2. *args 收集参数
  3. 普通关键字参数
  4. **kwargs 收集参数

4. 实际应用场景

场景1:函数装饰器

def logger(func):
    def wrapper(*args, **kwargs):
        print(f"调用函数: {func.__name__}")
        return func(*args, **kwargs)
    return wrapper

@logger
def add(a, b):
    return a + b

add(5, 3)  # 输出: 调用函数: add

场景2:参数透传

class Database:
    def query(self, sql, *params, **options):
        print(f"执行SQL: {sql}")
        print(f"参数: {params}")
        print(f"选项: {options}")

db = Database()
db.query("SELECT * FROM users", "arg1", "arg2", timeout=10, cache=True)

5. 注意事项

  • 参数名 argskwargs 只是约定俗成,可使用其他名称
  • *args 必须出现在 **kwargs 之前
  • 不能单独使用 * 作为参数名
  • 字典解包时键必须是字符串且符合变量名规则

发表评论