Python函数定义中/的作用是什么?及指定函数里/与*的功能解析
Python函数定义中
/和*的作用解析 问题1:Python函数定义里的/有啥用?
/是Python 3.8新增的语法标记,核心作用就是划界仅限位置参数的范围:
- 所有在
/左边的参数,调用时只能用位置传参,绝对不能用关键字指定参数名。 - 举个实际例子:
合法调用:def add(a, b, /): return a + badd(2, 3)
非法调用(直接报错):add(a=2, b=3) - 这个设计主要适配两个场景:一是让Python函数和底层C扩展的函数传参逻辑对齐;二是当你不想让外部调用依赖函数的参数名(比如后续可能要修改参数名但不想影响调用方),用
/就能把这些参数的名字隐藏起来,强制调用方只用位置传参。
问题2:解析def my_func(x, y, /, *, z = True):里的/和*
/的作用
这里x和y在/左边,意味着调用my_func时,这两个参数必须用位置传参,不能写x=1或者y=2这种关键字传参的形式,只能像my_func(5, 10)这样传递。
*的作用
*是另一个参数划界标记,它右边的参数(这里是z)只能用关键字传参,绝对不能靠位置传递。
结合这个例子,合法与非法调用一目了然:
- 合法调用方式:
my_func(1, 2, z=False) # z用关键字指定 my_func(3, 4) # z使用默认值True - 非法调用方式:
my_func(1, 2, False) # z不能通过位置传递 my_func(x=1, y=2, z=False) # x、y不能用关键字指定 - 这种混合使用
/和*的写法,把函数参数分成了三个明确区域:仅限位置参数(x、y)、无中间参数、仅限关键字参数(z),能让函数的传参规则非常清晰,避免调用方出错。
内容的提问来源于stack exchange,提问作者BakerBug
相关产品推荐
相关产品推荐

