`/`(仅限位置参数标记)和`*`(仅限关键字参数标记)

文章目录

在Python中, /(仅限位置参数标记)和 *(仅限关键字参数标记)是用于定义函数参数规则的特殊符号,它们明确限制了参数的传递方式,提升代码的可读性和规范性。以下是详细规则:

1. /:仅限位置参数标记

/ 用于分隔仅限位置参数 和其他参数(位置或关键字参数)。/ 左侧的参数只能通过位置传递,不能用关键字传递。

规则:
  • \ 左侧的参数:仅支持位置传参,禁止关键字传参。
  • \ 右侧的参数:默认支持位置或关键字传参(除非后续有*限制)。
  • \ 可以出现在参数列表的任意位置(但通常用于分隔纯位置参数),甚至可以单独作为最后一个参数(表示所有参数都是仅限位置参数)。
示例:
python 复制代码
def func(a, b, /, c, d):
    print(a, b, c, d)

# 合法调用
func(1, 2, 3, 4)          # a=1(位置), b=2(位置), c=3(位置), d=4(位置)
func(1, 2, c=3, d=4)      # a=1(位置), b=2(位置), c=3(关键字), d=4(关键字)

# 非法调用(a/b不能用关键字)
func(a=1, b=2, 3, 4)      # 语法错误
func(1, b=2, 3, 4)        # 语法错误
适用场景:
  • 强制参数按位置传递,避免因关键字拼写错误导致的问题(如内置函数len(obj)obj只能位置传参)。
  • 兼容旧代码或库的参数风格。

2. *:仅限关键字参数标记

* 用于分隔位置参数仅限关键字参数* 右侧的参数只能通过关键字传递,不能用位置传递。

规则:
  • * 左侧的参数:支持位置或关键字传参(除非左侧有/限制)。
  • * 右侧的参数:仅支持关键字传参,禁止位置传参。
  • 如果*后没有参数名(如def func(a, *, b):),则*右侧的所有参数都是仅限关键字参数。
示例:
python 复制代码
def func(a, *, b, c):
    print(a, b, c)

# 合法调用
func(1, b=2, c=3)         # a=1(位置), b=2(关键字), c=3(关键字)
func(a=1, b=2, c=3)       # 全关键字传参

# 非法调用(b/c不能用位置)
func(1, 2, 3)             # 语法错误
func(1, 2, c=3)           # 语法错误
适用场景:
  • 强制参数用关键字传递,提高代码可读性(如func(data, verbose=True)func(data, True)更清晰)。
  • 避免参数顺序混淆(尤其是参数类型相似时)。

3. /* 结合使用

可以同时使用/*,划分出三类参数:仅限位置参数/左侧)、位置或关键字参数/*之间)、仅限关键字参数*右侧)。

示例:
python 复制代码
def func(a, b, /, c, *, d, e):
    print(a, b, c, d, e)

# 合法调用
func(1, 2, 3, d=4, e=5)   # a=1(位置), b=2(位置), c=3(位置), d=4(关键字), e=5(关键字)
func(1, 2, c=3, d=4, e=5) # c用关键字传参

# 非法调用
func(a=1, 2, 3, d=4, e=5) # a不能用关键字
func(1, 2, 3, 4, 5)       # d/e不能用位置

4. 与默认参数结合

/*标记的参数可以设置默认值,但需遵循传递规则:

python 复制代码
def func(a, b=10, /, c=20, *, d=30):
    print(a, b, c, d)

# 合法调用
func(5)                   # a=5, b=10(默认), c=20(默认), d=30(默认)
func(5, 6, 7, d=8)        # 覆盖默认值
func(5, c=7, d=8)         # b用默认,c用关键字

总结

符号 作用 左侧参数规则 右侧参数规则
/ 仅限位置参数标记 仅位置传参 位置/关键字传参
* 仅限关键字参数标记 位置/关键字传参 仅关键字传参

通过这两个符号,可以精确控制函数参数的传递方式,让代码更规范、可读性更强。

相关推荐
choke2338 分钟前
[特殊字符] Python异常处理
开发语言·python
玄同7651 小时前
从 0 到 1:用 Python 开发 MCP 工具,让 AI 智能体拥有 “超能力”
开发语言·人工智能·python·agent·ai编程·mcp·trae
小瑞瑞acd1 小时前
【小瑞瑞精讲】卷积神经网络(CNN):从入门到精通,计算机如何“看”懂世界?
人工智能·python·深度学习·神经网络·机器学习
火车叼位2 小时前
也许你不需要创建.venv, 此规范使python脚本自备依赖
python
火车叼位2 小时前
脚本伪装:让 Python 与 Node.js 像原生 Shell 命令一样运行
运维·javascript·python
孤狼warrior2 小时前
YOLO目标检测 一千字解析yolo最初的摸样 模型下载,数据集构建及模型训练代码
人工智能·python·深度学习·算法·yolo·目标检测·目标跟踪
Katecat996632 小时前
YOLO11分割算法实现甲状腺超声病灶自动检测与定位_DWR方法应用
python
玩大数据的龙威3 小时前
农经权二轮延包—各种地块示意图
python·arcgis
ZH15455891313 小时前
Flutter for OpenHarmony Python学习助手实战:数据库操作与管理的实现
python·学习·flutter
belldeep3 小时前
python:用 Flask 3 , mistune 2 和 mermaid.min.js 10.9 来实现 Markdown 中 mermaid 图表的渲染
javascript·python·flask