作为参考,我指的是post
中的答案答案的作者提供了以下代码
def sum(*values, **options):
s = 0
for i in values:
s = s + i
if "neg" in options:
if neg:
s = -s
return s
s = sum(1, 2, 3, 4, 5) # returns 15
s = sum(1, 2, 3, 4, 5, neg=True) # returns -15
s = sum(1, 2, 3, 4, 5, neg=False) # returns 15
然而,当我在我的地方跑步时,我收到以下错误
NameError: global name 'neg' is not defined
任何人都可以解释这个。一般而言,该功能如何知道values
何时结束以及options
何时开始
答案 0 :(得分:4)
if neg:
那条线路有问题。它应该是:
if options["neg"]:
当值结束时和选项何时开始时,函数如何知道?
未命名的值会转到*values
。关键字参数放在**options
。
答案 1 :(得分:2)
你犯了一个小错误。将您的代码更改为以下内容,它应该可以工作。只需从"neg"
字典中获取options
的值,(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
将被取消,具体取决于字典中的值。