【发布时间】:2017-07-14 04:22:48
【问题描述】:
我尝试了不同的方法来调用带有 *args 的方法。下面是我的代码片段。
def total(name, *args):
if args:
print("%s has total money of Rs %d/- " %(name, sum(args)))
else:
print("%s's piggy bank has no money" %name)
现在有两种方法可以调用这个方法。一种是在 *() 中传递额外的参数,或者直接用逗号分隔。我故意以 param=value 的形式传递 'name' 的值,这样它就会引发错误。以下是我尝试的两种方法:-
1 - 传递额外的参数逗号分隔:-
>>> total(name="Adi", 1, 2, 10 )
File "<stdin>", line 1
SyntaxError: non-keyword arg after keyword arg
2 - 使用 *() 传递额外的参数:-
>>> total(name="Adi", *(1, 2, 10) )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: total() got multiple values for keyword argument 'name'
第一个错误消息非常清楚,它传达了确切的错误。但是,我无法理解第二次调用的错误消息。
Python 如何评估第二次调用它为参数“name”获取多个值?我想到的可能方式是内部 Python 将是翻译
total(name="Adi", *(1, 2, 10))
如下:-
总计(*(1, 2, 10), name="Adi" )
在上面的翻译中,根据位置,'name' 得到值 *(1,2,10),然后又得到“Adi”。因此可以理解多值错误。
但是,我不确定,python 内部是否会改变位置?对此的任何见解都会有所帮助。
【问题讨论】:
-
total(name-"Adi", 1, 2, 10 )无效,因为-符号。您确定要向我们展示真实代码吗? -
我的错。错过了。
标签: python python-2.7