Python函数参数中的斜杠(/)和星号(*)详解

在 Python 中定义函数时,有时会出现斜杠(/)和星号(*)这两种特殊的参数符号,斜杠(/)和星号(*)用于指定参数的传递方式,它们分别表示 仅限位置参数(Positional-Only Parameters)仅限关键字参数(Keyword-Only Parameters)

1. 斜杠 / —— 仅限位置参数

  • 含义:在 / 左侧的参数只能以位置参数(positional argument)的方式传递,不能使用关键字参数形式。

  • 示例

    def func(a, b, /, c):
        return a + b + c
    
    func(1, 2, 3)      # 正确:a=1, b=2, c=3
    func(1, 2, c=3)    # 正确:c 不受 / 影响,用关键字传递与否均可
    func(a=1, b=2, c=3) # 错误:a 和 b 不能使用关键字传参
    
  • 用途:通常用于避免 API 设计中的参数名冲突,或者强制某些参数必须按位置传递(如某些内置函数)。


2. 星号 * —— 仅限关键字参数

  • 含义:在 * 右侧的参数必须用关键字参数(keyword argument)的方式传递,不能按位置传递。

  • 示例

    def func(a, *, b, c):
        return a + b + c
    
    func(1, b=2, c=3)  # 正确:b 和 c 必须用关键字
    func(a=1, b=2, c=3)  # 正确:a 不受 * 影响,用关键字传递与否均可
    func(1, 2, 3)      # 错误:b 和 c 不能按位置传递
    
  • 用途:提高代码可读性,强制某些参数显式命名,避免混淆。


3. 组合使用 /*

  • 示例(如内置的 sorted 函数):

    sorted(iterable, /, *, key=None, reverse=False)
    
    • iterable仅限位置参数(不能写成 sorted(iterable=...))。
    • keyreverse仅限关键字参数(必须写成 key=..., reverse=...)。
  • 调用示例

    sorted([3, 1, 2], key=lambda x: x)  # 正确
    sorted([3, 1, 2], lambda x: x, True)  # 错误:key和reverse必须以关键字传递
    sorted(iterable=[3, 1, 2], key=lambda x: x)  # 错误:iterable 不能关键字传参
    

总结

符号作用示例
/左侧参数仅限位置def f(a, /, b): ...
*右侧参数仅限关键字def f(a, *, b): ...
组合1/*之间无其他参数sorted(iterable, /, *, key, reverse)
组合2/*之间还有其他参数def f(a, b, /, c, *, d) c不受/*影响,按位置或关键字传递均可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值