大家好,我是正在实战各种AI项目的程序员晚枫。
今天聊一个让我面试挂了3次才彻底搞懂的知识点——*Python函数参数的args和kwargs。
如果你也被这两个星号搞晕过,这篇文章就是为你写的。我会用最通俗的方式,让你一次搞明白。
为什么要学这个?
先看一个场景:
你要写一个求和函数,但不确定用户会传几个数:
1 | # 只能处理2个数 |
这时候就需要*args出场了。
*args:接收任意多个位置参数
基本用法
1 | def total(*args): |
args到底是什么?
1 | def show_args(*args): |
args是一个元组!里面包含了所有多余的位置参数。
为什么叫args?
可以改名字,但约定俗成叫args(arguments的缩写)。
**kwargs:接收任意多个关键字参数
基本用法
1 | def print_info(**kwargs): |
kwargs到底是什么?
1 | def show_kwargs(**kwargs): |
kwargs是一个字典!里面包含了所有多余的关键字参数。
四种参数类型的完整顺序
Python函数参数有4种类型,必须按这个顺序写:
1 | def func(位置参数, *args, 默认参数, **kwargs): |
记忆口诀:先位置,后不定,再默认,最后关键字。
实战案例:灵活的日志函数
写一个既能打印普通信息,又能打印详细信息的函数:
1 | def log(message, *details, **metadata): |
*这就是args和kwargs的威力——超级灵活!
解包操作:*和**的另一面
除了定义函数时用,调用函数时也能用:
列表解包 *
1 | def add(a, b, c): |
字典解包 **
1 | def greet(name, age): |
常见面试题
*Q:args和kwargs的作用是什么?
A:让函数接收任意数量的参数,提高灵活性。
Q:可以只用其中一个吗?
A:可以,根据需求选择。*args收位置参数,**kwargs收关键字参数。
Q:下面代码的输出是什么?
1 | def foo(a, *args, b=2, **kwargs): |
A:1 (3, 4) 5 {'c': 6, 'd': 7}
推荐:AI Python零基础实战营
想系统学习Python函数和高级特性?
课程内容:
- ✅ Python基础语法
- ✅ 函数详解(参数、返回值、作用域)
- ✅ *args和**kwargs深度解析
- ✅ 装饰器、生成器等高级特性
- ✅ 实战项目练习
🎁 限时福利:送《Python编程从入门到实践》实体书
👉 点击了解详情
相关阅读
PS:args和*kwargs是Python面试必考点,也是写出优雅代码的关键。花10分钟搞懂,值!
