该dict.update()
函数可以采用一(key, value)
对可迭代的对象;您那里的代码传入生成此类对的生成器表达式。它循环并为每一对只选择方法返回sub.BACKENDS.items()
的那些。您也可以将其表示为 for 循环:val.enabled()
True
for key, value in sub.BACKENDS.items():
if value.enabled():
backends[key] = value
该dict.get()
函数返回键或默认值。这里默认是一个匿名函数,一个lambda
. 因此BACKEND
字典要么具有name
变量中命名的键的值,要么返回 lambda 匿名函数。无论哪种方式,.get()
调用的结果本身都会被调用。在 Python 中,函数是一等对象;您也可以将它们存储在字典中;如果您从字典中检索一个,您仍然可以调用它:
>>> def foo(): print 'bar'
...
>>> somedict = {'howdy': foo}
>>> somedict['howdy']()
bar
>>> somedict['howdy']
<function foo at 0x109ab9320>
>>> somedict.get('non-existent', 'not found')
'not found'
>>> somedict.get('howdy', 'not found')
<function foo at 0x109ab9320>
>>> somedict.get('howdy', 'not found')()
bar
因此,额外的()
after.get()
应用于.get()
返回的任何内容。
Lambda 是可以在表达式中定义的匿名函数(def functionname()
一行是一个语句,必须独立存在);因此,可以在将 lambdas 直接存储到字典中时对其进行定义:
>>> somedict = {'howdy': lambda: 'bar'}
>>> print somedict['howdy']()
bar