Python方法参数列表中的*符号含义是什么?
关于Python方法参数中
*符号的解释 嘿,这个问题我太熟啦!你代码里的*可不是表示中间还有更多参数哦,它是Python里用来强制关键字参数的特殊语法,我给你详细拆解清楚:
先看你给出的代码片段:
class ExampleClass(): def example_method(self, a: str, *, b: str) -> str: ...
这里的*是一个参数分隔符,它的核心作用是划分参数的传递规则:
*前面的参数(比如这里的a)既可以用位置参数传递,也可以用关键字参数传递;*后面的参数(比如这里的b)必须用关键字参数传递,绝对不能用位置参数的方式传值。
举几个实际调用的例子就一目了然了:
正确的调用方式
obj = ExampleClass() # a用位置传,b用关键字传,符合规则 obj.example_method("hello", b="world") # a和b都用关键字传,也完全没问题 obj.example_method(a="hello", b="world")
错误的调用方式
obj = ExampleClass() # 报错!b是*后面的参数,不能用位置参数传递 obj.example_method("hello", "world")
这种语法的好处也很明显:当方法的某些参数含义比较关键,或者参数数量较多容易搞混顺序时,强制用关键字传递参数能让代码可读性大大提升,也能避免因为参数顺序写错导致的隐蔽bug。
另外补充个小知识点:如果*后面还跟着**kwargs(可变关键字参数),那*就同时起到了分隔位置参数、强制关键字参数和可变关键字参数的作用,但你这里的场景就是单纯的强制关键字参数分隔符啦。
内容的提问来源于stack exchange,提问作者zinglax
相关产品推荐
相关产品推荐

