苦练Python第33天:斜杠 / 与星号 * 的魔法——彻底搞懂函数参数顺序

前言

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

欢迎来到苦练Python第33天

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


📌 为什么要用 /*

  • 在 Python 3.8 之前,想限定"只能按位置传"或"只能按关键字传"得靠约定。
  • 从 3.8 起,/* 被正式写入语法,强制隔离参数种类,提升可读性、兼容性与安全性。

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

✅ 语法

python 复制代码
def demo(a, b, /, c):
    ...
  • 位于 / 左侧ab 只能按位置传值。
  • 位于 / 右侧c 不受限制,可位置也可关键字。

🧪 实战示例

python 复制代码
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️⃣ * ------ 右侧仅限关键字参数

✅ 语法

python 复制代码
def demo(*, x, y):
    ...
  • 位于 * 右侧xy 只能按关键字传值。
  • 位于 * 左侧的参数不受限制。

🧪 实战示例

python 复制代码
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️⃣ /* 同台竞技------全排列组合

✅ 终极模板

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

🧪 实战示例

python 复制代码
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️⃣ 常见误区与最佳实践

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

🧠 速记口诀

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


🎯 今日练习

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

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

相关推荐
测试员周周4 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
测试19984 小时前
软件测试 - 单元测试总结
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
K姐研究社5 小时前
怎么用AI制作电商口播视频,开拍APP一键生成
人工智能·音视频
LaughingZhu6 小时前
Product Hunt 每日热榜 | 2026-05-21
前端·人工智能·经验分享·chatgpt·html
Mahir086 小时前
Spring 循环依赖深度解密:从问题本质到三级缓存源码级解析
java·后端·spring·缓存·面试·循环依赖·三级缓存
曲幽6 小时前
我用了FastApiAdmin后,连夜把踩过的坑都整理出来了
redis·python·postgresql·vue3·fastapi·web·sqlalchemy·admin·fastapiadmin
传说故事6 小时前
【论文阅读】MotuBrain: An Advanced World Action Model for Robot Control
论文阅读·人工智能·具身智能·wam
北京耐用通信7 小时前
全域适配工业场景耐达讯自动化Modbus TCP 转 PROFIBUS 网关轻松实现以太网与现场总线互通
网络·人工智能·网络协议·自动化·信息与通信
火山引擎开发者社区7 小时前
TRAE × 火山引擎 Supabase:为你的 AI 应用装上“数据引擎”
人工智能
小a彤7 小时前
GE 在 CANN 五层架构中的位置
人工智能·深度学习·transformer