掘金 人工智能 07月26日 09:40
苦练Python第33天:斜杠 / 与星号 * 的魔法——彻底搞懂函数参数顺序
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了Python 3.8引入的函数参数定义中的特殊符号“/”和“*”的用法。通过清晰的语法解释和实战示例,文章展示了“/”如何强制参数必须按位置传递,而“*”则规定参数必须通过关键字传递。文章还介绍了“/”和“*”的组合使用,以及在函数签名设计中的常见误区和最佳实践,旨在帮助开发者写出更清晰、更具可读性和安全性的Python函数。

📌 “/”符号用于强制指定函数参数必须按位置传递。位于“/”左侧的参数,例如 `def func(a, b, /, c)` 中的 `a` 和 `b`,在调用函数时不能使用关键字参数传递,否则会引发TypeError,从而提高了代码的健壮性和可读性。

⭐ “*”符号用于强制指定函数参数必须通过关键字传递。位于“*”右侧的参数,例如 `def func(*, x, y)` 中的 `x` 和 `y`,在调用函数时必须使用关键字参数,不能按位置传递,这有助于避免因参数顺序错误导致的潜在bug,尤其是在参数较多时。

✨ “/”和“*”可以组合使用,形成更灵活的函数参数传递规则。例如 `def func(a, b, /, c, d, *, e, f)` 定义了一个函数,其中 `a`、`b` 只能按位置传递,`c`、`d` 可以按位置或关键字传递,而 `e`、`f` 只能按关键字传递,这种组合提供了极高的参数控制自由度。

💡 在使用“/”和“*”时,应注意其顺序固定为“/”在前,“*”在后,且不能写反。同时,要避免将所有参数都设置为位置参数或关键字参数,除非有特殊需求,合理利用它们可以使函数签名更清晰,提高代码的可维护性。

前言

大家好,我是倔强青铜三。欢迎关注我,微信公众号:倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!

欢迎来到苦练Python第33天

今天,我们把显微镜对准 Python 函数定义里两个不起眼的符号:/*。它们看似低调,却掌控着位置参数关键字参数的生死大权。五分钟读完,包你不再写出一团浆糊的函数签名。


📌 为什么要用 /*


1️⃣ / —— 左侧仅限位置参数

✅ 语法

def demo(a, b, /, c):    ...

🧪 实战示例

def greet(name, age, /, city):    print(f"{name} is {age} years old, from {city}.")# ✅ 合法调用greet("Alice", 30, "New York")greet("Alice", 30, city="New York")# ❌ 非法调用greet(name="Alice", age=30, city="New York")# TypeError: greet() got some positional-only arguments passed as keyword arguments

2️⃣ * —— 右侧仅限关键字参数

✅ 语法

def demo(*, x, y):    ...

🧪 实战示例

def divide(a, *, b):    return a / b# ✅ 合法调用divide(10, b=2)# ❌ 非法调用divide(10, 2)# TypeError: divide() takes 1 positional argument but 2 were given

3️⃣ /* 同台竞技——全排列组合

✅ 终极模板

def full(a, b, /, c, d, *, e, f):    ...
参数传递方式
a, b仅位置
c, d位置或关键字
e, f仅关键字

🧪 实战示例

def create_user(id, name, /, age, city=None, *, vip=False):    print(id, name, age, city, vip)# ✅ 合法调用create_user(1001, "Tom", 18)create_user(1001, "Tom", 18, city="Shanghai")create_user(1001, "Tom", 18, city="Shanghai", vip=True)# ❌ 非法调用create_user(id=1001, name="Tom", age=18)# TypeError: create_user() got some positional-only arguments passed as keyword arguments

4️⃣ 常见误区与最佳实践

误区正确姿势
/* 顺序写反只能 / 在前 * 在后
想让所有参数都可关键字不写 /
想让所有参数都可位置不写 *

🧠 速记口诀

斜杠左位,星右关键;斜星同框,顺序莫乱。


🎯 今日练习

    写一个 move(x, y, /, step=1, *, direction) 函数,只允许 xy 按位置传,direction 必须关键字传。用 / + * 改造你项目里最混乱的函数签名,让同事惊呼“专业”!

最后感谢阅读!欢迎关注我,微信公众号倔强青铜三。欢迎点赞收藏关注,一键三连!!!

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Python 函数参数 / * 关键字参数 位置参数
相关文章