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)
我把参数分成三个区域,一目了然:
/左边的self、param1、param2:纯位置参数,调用时必须按顺序传值,绝对不能用关键字指定。比如func(my_obj, 10, 20, ...)是对的,但func(my_obj, param1=10, param2=20, ...)就会报错——毕竟self本身就是类方法里必须位置传的参数,这俩刚好凑一块了。/和*中间的param3:自由派参数,既可以按位置传,也可以用关键字传。比如..., 30, ...或者..., param3=30, ...都合法,怎么方便怎么来。*右边的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
相关产品推荐
相关产品推荐

