python - 调用函数出错

标签 python function

函数的定义如下:

    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),我将不会收到错误消息。 我还有一个关于调用这个函数的问题。 可以调用默认值为 t1x 的函数,这不是 None,作为一个元组? 非常感谢您的帮助。

最佳答案

在你的函数中,

  • t 是位置参数

  • t1是关键字参数,有默认值(也是位置1的位置参数)

  • x 是所有其他位置参数的集合

如错误消息所述,任何 Python 函数都应在任何关键字参数之前包含所有位置变量。你必须像这样调用函数

testf(math.pi, t1=1)

当你传递一个关键字参数时,它应该是函数的最后一个参数(或者只有关键字参数可以跟在后面)。

当你说

testf(math.pi, 1, t1 = 2)

12都要赋值给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/

相关文章:

python - jinja2:将字符串转换为字典对象?

python - 在函数中将类的属性名称作为参数传递

python - 我应该如何在 python 中使用 lxml 处理 XLink 引用?

c++ - 'double'和 'double'类型的无效操作数

sql - 使用 ADO .NET 调用 SQL 函数

function - 这个函数签名在sml中是什么意思?

python - Flask-SQLAlchemy db.session.query(Model) 与 Model.query

python - 如何使用python Popen自动输入并将控制权返回到命令行

r - 附加函数名称,但参数较少

R:在名称依赖于输入的函数中制作数据帧