如何使用python函数的不定长参数?

Python函数通过args和kwargs实现不定长参数,args接收任意位置参数并存为元组,kwargs接收任意关键字参数并存为字典,二者结合可灵活处理参数数量和类型不确定的场景。

Python函数的不定长参数用来接收任意数量的参数,适合处理调用时参数个数不确定的情况。主要通过 *args**kwargs 实现,它们能灵活收集位置参数和关键字参数。

使用 *args 接收任意位置参数

*args 可以捕获所有未被匹配的位置参数,存储为一个元组。

例如:
  • 定义函数时写成 def func(*args),调用时传入多个值,比如 func(1, 2, 3)
  • 在函数内部,args 是一个元组,可以遍历或索引使用
  • 如果还有固定参数,*args 必须放在最后
示例代码:
def show_numbers(*args):
    for num in args:
        print(num)

show_numbers(10, 20, 30)

输出:

10

20

30

使用 **kwargs 接收任意关键字参数

**kwargs 捕获所有未被匹配的关键字参数,保存为字典。

  • 函数定义写成 def func(**kwargs),调用时使用键值对,如 func(name="Alice", age=25)
  • 在函数内,kwargs 是字典,可用 .items() 遍历
  • **kwargs 也要放在参数列表最后
示例代码:
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Bob", city="Beijing", job="Engineer")

输出:

name: Bob

city: Beijing

job: Engineer

同时使用 *args 和 **kwargs

当需要同时处理位置参数和关键字参数时,可以把两者组合使用。

  • 参数顺序必须是:普通参数 → *args → **kwargs
  • 这样能覆盖最全的调用方式
示例:
def log_call(prefix, *args, **kwargs):
    print(f"Log: {prefix}")
    print("Positional args:", args)
    print("Keyword args:", kwargs)

log_call("Start", 1, 2, name="Tom", action="login")

输出:

Log: Start

Positional args: (1, 2)

Keyword args: {'name': 'Tom', 'action': 'login'}

基本上就这些。掌握 *args 和 **kwargs 能写出更通用、可扩展的函数。