これは主に構文糖衣ですが、リストするステートメントには当てはまりません。代わりに、それはと同等です
value = type(self)()
self[key] = value
違いを確認するには、Pythonプロンプトで次のように入力します。
>>> class FakeDict(object):
... def __setitem__(self, k, v):
... pass
... def __getitem__(self, k):
... raise KeyError("boom!")
...
>>> d = FakeDict()
>>> x = d[1] = 42
>>> d[1] = 42
>>> x = d[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in __getitem__
KeyError: boom!
もちろん、行儀が良けれdict
ば、これは問題ではありませんが、
self[key] = type(self)()
value = self[key]
2行目で余分なルックアップを実行するdict
ため、ループ内で省略形を使用するとパフォーマンスが向上する場合があります。
一般的なケースでは、上記で説明したよりも少し複雑です。省略形の割り当ては、実際にはと同等です
__some_temporary = type(self)()
value = __some_temporary
self[key] = __some_temporary
単純化された形式は、が単純なローカル変数であるvalue = type(self)(); self[key] = value
ためにのみ発生します。失敗する可能性のある形式の式に置き換えられたvalue
場合、同等性は保持されなくなります。value
container[key]