Python面试题更新 2026-08-05

在 Python 中,函数定义时使用 *arg 和 **kwargs 分别代表什么含义?它们各自适用于哪些调用场景,具体应如何书写和使用?

编码实现技术原理Python

考察说明

考查对 Python 可变参数机制的理解及实际应用能力。

回答思路

  1. 【回答框架 1】*arg 用于收集位置参数,在函数定义中写作 *args,调用时传入的多个位置参数会被打包成一个元组,函数体内可遍历该元组。它允许函数接收任意数量的位置参数,常用于参数数量不确定的场景。
  2. 【回答框架 2】**kwargs 用于收集关键字参数,写作 **kwargs,调用时传入的 key=value 形式参数会被打包成一个字典,函数体内可通过键访问值。它允许函数接收任意数量的关键字参数,常用于配置项或可选参数较多的场景。
  3. 【回答框架 3】两者可同时使用,但顺序必须为位置参数、*args、默认参数、**kwargs。例如 def func(a, *args, b=1, **kwargs)。调用时,位置参数优先匹配 a,多余位置参数进入 args,关键字参数中未匹配的进入 kwargs。
  4. 【回答框架 4】实际使用中,*args 常用于装饰器包装函数、日志记录等需要透传参数的场景;**kwargs 常用于配置合并、API 封装等需要灵活处理命名参数的场景。两者结合可构建高度灵活的函数接口。
  5. 【回答框架 5】注意 *args 和 **kwargs 只是约定俗成的命名,关键在于星号语法。在函数调用时,也可使用 *list 和 **dict 进行参数解包,将序列或字典展开为参数传递。
  6. 【关键点 1】*args 收集位置参数为元组,**kwargs 收集关键字参数为字典。
  7. 【关键点 2】两者可共存,参数顺序为位置参数、*args、默认参数、**kwargs。
  8. 【关键点 3】调用时可用 * 和 ** 解包序列和字典。
  9. 【关键点 4】常用于装饰器、配置合并等灵活参数场景。
  10. 【易错点 1】混淆 *args 和 **kwargs 的收集类型,误以为 *args 收集字典。
  11. 【易错点 2】忽略参数顺序,导致语法错误。
  12. 【易错点 3】过度使用可变参数降低代码可读性,应适度使用。