You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中独立参数*与/的作用及特定函数定义中二者的含义

Python函数定义里的*和/:参数传递的精准控制工具

嘿,这俩语法都是Python 3.8+里用来精确管控参数传递规则的实用工具,我给你拆解明白:

一、单独用的*和/各自的作用

  • 斜杠/:它是位置参数的“截止线”。在/左边的所有参数,只能通过位置传参的方式传递——意思就是调用函数时,这些参数必须乖乖按顺序写,不能用参数名=值的形式传。比如如果函数定义是def foo(a, b, /): ...,那你只能调用foo(1, 2),不能写foo(a=1, b=2)。
  • 单星号*:它是关键字参数的“起跑线”。在*右边的所有参数,只能通过关键字传参的方式传递——调用时必须写成参数名=值,不能只按顺序丢个值进去。比如函数def bar(*, x, y): ...,调用只能是bar(x=3, y=4),不能是bar(3,4)。

二、示例函数里的*和/具体啥意思

咱们来看你给的这个函数:

def func(self, param1, param2, /, param3, *, param4, param5):
    print(param1, param2, param3, param4, param5)

我把参数分成三个区域,一目了然:

  1. /左边的self、param1、param2:纯位置参数,调用时必须按顺序传值,绝对不能用关键字指定。比如func(my_obj, 10, 20, ...)是对的,但func(my_obj, param1=10, param2=20, ...)就会报错——毕竟self本身就是类方法里必须位置传的参数,这俩刚好凑一块了。
  2. /和*中间的param3:自由派参数,既可以按位置传,也可以用关键字传。比如..., 30, ...或者..., param3=30, ...都合法,怎么方便怎么来。
  3. *右边的param4、param5:纯关键字参数,调用时必须指名道姓传值。比如结尾必须是param4=40, param5=50,直接丢40,50进去肯定报错。

给你举几个合法和非法的调用例子,更直观:

合法调用

# 全部按规则传递
func(my_obj, 10, 20, 30, param4=40, param5=50)
# param3用关键字传也没问题
func(my_obj, 10, 20, param3=30, param4=40, param5=50)

非法调用(会报错)

# param1用关键字传,违反/的规则
func(my_obj, param1=10, param2=20, 30, param4=40, param5=50)
# param4、param5用位置传,违反*的规则
func(my_obj, 10, 20, 30, 40, 50)

内容的提问来源于stack exchange,提问作者ibarrond

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 09:37:29