我是Python的新手,所以我正在阅读Pro Python,它有关于将变量关键字参数传递给函数的部分。在阅读完该部分之后,我编写了以下代码,但这些代码似乎无法正常工作。
def fun(**a):
return a['height'] if a is not {} else 0
当我打电话给没有参数的乐趣时,我遇到了一个关键错误。如果a不是空字典,我应该如何更改代码以使其返回[' height']如果它是空字典则返回0?
答案 0 :(得分:1)
您正在测试a
同一个对象是否为随机空字典,而不是该字典是否具有密钥height
。 is not
和is
测试身份,而非等同。
您可以创建任意数量的空字典,但它们不会是相同的对象:
>>> a = {}
>>> b = {}
>>> a == b
True
>>> a is b
False
如果您想在缺少密钥时返回默认值,请使用此处的dict.get()
method:
return a.get('height', 0)
或使用not a
测试空字典:
return a['height'] if a else 0
但请注意,如果字典中包含KeyError
以外的密钥,您仍会获得'height'
。所有空容器在布尔上下文中测试为 false ,请参阅Truth Value Testing。
答案 1 :(得分:0)
要检查字典是否具有特定密钥,请执行以下操作:
if 'height' not in a: return 0
或者您可以将get()
与默认值一起使用:
return a.get('height', 0)