def func(a, b, c, d): print(a, b, c, d)
func(1, c=3, *(2,), **{'d':4})
func(1, c=3, 2, **{'d':4})
为什么前者调用有效而后者无效?我的意思是第一个不应该也返回错误吗? * 不只是解压一个可迭代对象吗?
最佳答案
位置参数必须始终出现在命名和解压缩参数之前。
在表达式中:
func(1, c=3, 2, **{'d':4})
2
是一个位置参数,而 c=3
是一个命名参数。这样写是无效的。您必须将命名参数移到所有 位置参数之后。
func(1, 2, c=3, **{'d':4})
另一方面,表达式:
func(1, c=3, *(2,), **{'d':4})
有效。 1
是这里唯一的位置参数。 c=3
是命名参数,*(2,)
和 **{'d':4}
被解压。只要位置参数在前,都有效。
关于python - 函数调用和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25511554/