Python函数定义参数中的单独*符号有什么作用?
Python 函数参数中单独
* 的作用说明 Python 3 引入了仅限关键字参数的语法,函数参数列表里单独出现的*就是该特性的分隔符:*之后定义的所有形参,调用时必须通过关键字形式传值,不允许使用位置参数传递。
代码报错原因
你定义的函数如下:
def my_pow(x=3, *, y=2): return x**y
这里的*把参数分为两个区域:
*前面的x:既支持位置传参,也支持关键字传参,默认值为3*后面的y:属于仅限关键字参数,只能通过y=值的方式传参,默认值为2
调用my_pow(4,4)时,你传入了2个位置参数:
第一个位置参数4可以正常赋值给x,但第二个位置参数4没有匹配的位置形参(y不接受位置传参),因此会抛出类型错误:TypeError: my_pow() takes from 0 to 1 positional arguments but 2 were given。
合法调用的运行原理
你列出的几个调用都符合参数传递规则,因此可以正常执行:
my_pow(4,y = 4):x通过位置传参赋值为4,y通过关键字传参赋值为4,符合规则my_pow(x = 4):x通过关键字传参赋值为4,y使用默认值2,符合规则my_pow(y = 4):x使用默认值3,y通过关键字传参赋值为4,符合规则my_pow(4):x通过位置传参赋值为4,y使用默认值2,没有向仅限关键字参数传递位置值,符合规则
内容的提问来源于stack exchange,提问作者Timur
相关产品推荐
相关产品推荐

