函数的定义如下:
def testf(t,t1 = 0,*x):
... print t
... print t1
... print x[0]
... return sin(x[0]*t*t1)
...
我将函数称为 testf(pi,t1=1,1)。我收到的错误是
SyntaxError: non-keyword arg after keyword arg
函数调用有什么问题吗?
如果调用函数 testf(t1=1,t=pi,1)
,我会收到同样的错误
如果调用函数 testf(pi,1,1)
,我将不会收到错误消息。
我还有一个关于调用这个函数的问题。
可以调用默认值为 t1
和 x
的函数,这不是 None,作为一个元组?
非常感谢您的帮助。
最佳答案
在你的函数中,
t
是位置参数t1
是关键字参数,有默认值(也是位置1的位置参数)x
是所有其他位置参数的集合
如错误消息所述,任何 Python 函数都应在任何关键字参数之前包含所有位置变量。你必须像这样调用函数
testf(math.pi, t1=1)
当你传递一个关键字参数时,它应该是函数的最后一个参数(或者只有关键字参数可以跟在后面)。
当你说
testf(math.pi, 1, t1 = 2)
1
和2
都要赋值给t1
(t1
也是index处的位置变量1),这是不可能的。因此,在这种情况下也会抛出错误。
def testf(t, t1 = 0, *x):
print t, x, t1
testf(5)
# 5 () 0 -> `t` is 5, `t1` takes the default value, `x` is empty
testf(5, 10, 15, 20)
# 5 (15, 20) 10 -> `t` is 5, `t1` is 10, `x` is 15 and 20
testf(5, t1 = 20)
# 5 () 20 -> `t` is 5, `t1` is 20, `x` is empty
testf(5, 10, t1 = 20)
# TypeError: testf() got multiple values for keyword argument 't1'
testf(5, t1 = 20, 10)
# SyntaxError: non-keyword arg after keyword arg
关于python - 调用函数出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22776797/