在python函数调用中对**参数感到困惑
这个问题在这里已经有了答案:
if neg:
那条线是越野车。 它应该是:
if options["neg"]:
函数如何知道值何时结束以及何时开始?
未命名的值以*values 。 关键字参数进入**options 。
你犯了一个小错误。 改变你的代码到下面,它应该工作。 只需从options字典中获取"neg"的值( values包含未命名的参数, options包含关键字参数)
>>> def sum(*values, **options):
s = 0
for i in values:
s = s + i
if "neg" in options:
if options["neg"]:
s = -s
return s
>>> s = sum(1, 2, 3, 4, 5, neg=True)
>>> s
-15
>>> sum(1, 2, 3, 4, 5)
15
>>> sum(1, 2, 3, 4, 5, neg=True)
-15
>>> sum(1, 2, 3, 4, 5, neg=False)
15
尽管,正如@glglgl指出的那样,将代码更改为以下代码会将if语句合并为一个。
>>> def sum(*values, **options):
s = 0
for i in values:
s = s + i
if options.get("neg", False):
s = -s
return s
如何get(...)工作?
如果options字典没有键"neg" (由第一个if条件处理),那么get(...)返回False的默认值,并且s不是否定的,如果options包含"neg" ,则返回值,在这种情况下,取决于字典中的值, s被否定。
