我正在尝试在python中开发一个简单的计算器函数,其中函数签名可能超过2个,默认操作将是ADD,默认输出格式将是浮点数。
def calculator(operation=ADD,output=float,*args):
基本上该函数应该将操作应用于前两个数字,然后将其再次应用于结果和下一个数字,依此类推。例如,如果数字是6,4,9和1,并且操作是减法,则函数应返回6 - 4 - 9 - 1.
然而,当我用:
调用该函数时calculator(1,2,3,4,operation=ADD,output=float)
我收到错误:
TypeError: calculator() got multiple values for argument 'operation'
有人可以告诉我应该如何使用正确的参数调用此函数?
答案 0 :(得分:2)
先放*args
。它将整数解释为operation
的值,它期待一个字符串。
答案 1 :(得分:1)
您可以定义一个功能:
def calculator(operation, output, *args):
pass
您可以将其用于:
calculator('ADD', 'float', 1, 2, 3, 4)
你的论点是位置的,所以如果你打电话:
calculator(1,2,3,4,operation=ADD,output=float)
你实际上是在说操作= 1且输出= 2,这就是解释器抱怨传递值两次的原因。
答案 2 :(得分:0)
当你打电话给你的功能时
def calculator(operation=ADD, output=float, *args):
...
与calculator(1,2,3,4,operation=ADD,output=float)
类似,参数首先按位置1,2,3,4
分配,然后按密钥字operation=ADD, output=float
分配,以便您获得操作 = 1,输出 = 2而 args 得到其余的(3,4),然后它尝试分配关键字参数,但事实证明操作已经因此分配了错误。
因此,使用您当前的定义将其命名为calculator(ADD,float,1,2,3,4)
或将定义更改为
def calculator(*args, operation=ADD, output=float):
...
这样操作和输出只是关键字参数,您可以像calculator(1,2,3,4,operation=ADD,output=float)
之前那样调用它。
但是这个语法只是python 3,要在你需要做的python 2中做同样的事情
def calculator(*args, **kwarg):
operation = kwarg.get("operation",ADD)
output = kwarg.get("output",float)
...
答案 3 :(得分:0)
你可能应该使用args,kwargs。这里给出了一个很好的教程。 https://www.unixmen.com/introduction-python-args-kwargs-beginners-part-1/
>>> def calculator(*args, **kwargs):
... for a in args:
... print(a)
... for k, v in kwargs.items():
... print("%s := %s" % (k, v))
...
>>> calculator(1,2,3, op=add, ouput=float)
1
2
3
ouput := <class 'float'>
op := <built-in function add>