Image

结合上一个问题中提到的 * 符号(强制关键字参数),你可能会好奇:为什么我们要费劲地写 参数名=值,而不是直接传值呢?

简单来说,关键字传递(Keyword Arguments)是 Python 中一种通过参数名来传递值的方式。它的核心好处在于牺牲一点点键盘敲击(多打几个字),换取代码的可读性安全性灵活性

以下是关键字传递的四大核心优势:

1. 📖 极大提升代码可读性(自文档化)

这是最关键的好处。位置参数依赖顺序,当看到一串数字或布尔值时,很难立刻明白它们代表什么。关键字参数让代码“不言自明”。

2. 🛡️ 避免参数顺序错误(安全性)

当函数参数较多且类型相似(例如多个 intbool)时,很容易因为写错顺序而导致 bug。关键字传递无视顺序,彻底解决了这个问题。

3. 🧩 灵活跳过默认参数

如果一个函数有多个带有默认值的可选参数,使用位置参数时,如果你想修改最后一个参数,就必须把前面所有的默认值都写一遍。而关键字参数允许你直接“点名”修改特定的参数。

def send_request(url, timeout=30, retries=3, headers=None):
    pass

只想修改 retries,其他用默认值。如果用位置参数,必须写全 timeout 和 retries。

使用关键字,直接指定,非常简洁。send_request("http://api.com", retries=5)

4. 🚀 便于 API 扩展与维护(向后兼容)

在开发库或修改旧代码时,如果需要给函数增加新参数,使用关键字参数(特别是配合 * 符号)可以保证旧代码不崩溃。


📌 总结对比

为了更直观地对比,我们可以看下表:

特性 位置参数 关键字参数
顺序 必须严格遵守 任意顺序
可读性 差(像魔法数字) 好(像配置文件)
容错性 低(换位置就报错) 高(名字对就行)
扩展性 差(加参数容易断旧代码) 好(可设默认值)

建议: 对于参数超过 3 个,或者包含 boolint 等含义不明确的参数时,强烈建议使用关键字传递,或者在函数定义中使用 * 符号强制要求调用者使用关键字传递。