このdict.update()
関数(key, value)
は反復可能なペアを取ることができます。そこにあるコードは、そのようなペアを生成するジェネレーター式を渡します。ループしsub.BACKENDS.items()
、ペアごとに、val.enabled()
メソッドが を返すペアのみを選択しますTrue
。for ループとして表現することもできます。
for key, value in sub.BACKENDS.items():
if value.enabled():
backends[key] = value
このdict.get()
関数は、キーまたはデフォルトのいずれかを返します。ここで、デフォルトは無名関数 alambda
です。したがって、BACKEND
ディクショナリには、name
変数で指定されたキーの値があるか、ラムダ匿名関数が返されます。いずれにせよ、.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()
ラムダは、式で定義できる無名関数def functionname()
です (行はステートメントであり、独立している必要があります)。したがって、ラムダは辞書に直接格納しながら定義できます。
>>> somedict = {'howdy': lambda: 'bar'}
>>> print somedict['howdy']()
bar