即時解決策はこれです:唯一の引数other
は任意及びタプル(または長さ2の他のイテレート可能オブジェクト)の反復可能あります。
引数なし(それはあなたが:-)それを必要としないときのために、オプションです:!
:タプル(オプションの引数を囲む角括弧でこれを混同していない)と
>>> d = {}
>>> d.update()
>>> d
{}
一覧
>>> d = {}
>>> d.update([("key", "value")])
>>> d
{'key': 'value'}
Python glossary on iterablesによれば、(全ての配列型など)のタプルも反復可能であるが、これは失敗:
>>> d = {}
>>> d.update((("key", "value")))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 3; 2 is required
再び
Python documentation on tuple
はこの謎を解く:
注それは実際にはタプルではなく、括弧を作るコンマであること。かっこは、空のタプルの場合を除いて、または構文上のあいまいさを避けるために必要な場合を除き、オプションです。
e.e.e. (None)
は全くタプルではなく、(None,)
は次のとおりです。
>>> type((None,))
<class 'tuple'>
だから、これは動作します:
>>> d = {}
>>> d.update((("key", "value"),))
>>> d
{'key': 'value'}
>>>
しかし構文上の曖昧さが前記ので、これは(
>>> d = {}
>>> d.update(("key", "value"),)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 3; 2 is required
ないがカンマは関数の引数のセパレータです)。