$ python2.7 -m timeit 'd={}'
10000000 loops, best of 3: 0.0331 usec per loop
$ python2.7 -m timeit 'd=dict()'
1000000 loops, best of 3: 0.19 usec per loop
なぜ一方を他方の上に使用するのですか?
$ python2.7 -m timeit 'd={}'
10000000 loops, best of 3: 0.0331 usec per loop
$ python2.7 -m timeit 'd=dict()'
1000000 loops, best of 3: 0.19 usec per loop
なぜ一方を他方の上に使用するのですか?
私は、句読点よりも単語を好む人の 1 人です。たとえば、Perl よりも Python を選んだ理由の 1 つです。「人生はブレースなしでより良い」(笑顔のティーンエイジャーの漫画が描かれたTシャツに付いていた古いPythonのモットー;-)、結局のところ(元々はグループ化のためにブレースとインデントを参照することを意図していましたが、 、ブレースはブレースです!-)。
数ナノ秒の「支払い」(中括弧、大括弧などの代わりに明確で読みやすい短い単語を使用する目的で)は、一般的に手頃な価格です(ほとんどの場合、組み込みの名前空間へのルックアップのコストであり、毎回支払う価格です)組み込みの型または関数を使用すると、ループからいくつかのルックアップを巻き上げることで、それを穏やかに最適化できます)。
したがって、私は通常、 for 、 for の代わりに、 for 、 for などを書くのが好きな人です。これは、dict()
発音{}
可能なコードの一般的なスタイルの好みにすぎません。私が別のスタイルを使用する既存のコードベースに取り組んでいるとき、または新しいプロジェクトのチームメイトが別の方法で強い好みを持っているとき、もちろんそれを受け入れることができます (ただし、チームメイトの場合、少し伝道しようとすることはありませんが、 ;-)。list(L)
L[:]
list()
[]
tuple()
()
人々が (just) dict()
over (just ) を使用する場合{}
、それは一般に、知らないため{}
(これはかなりの偉業です)、またはより明確だと考えているためです (これは主観的ですが、一般的ではありません)。
ただし、 でdict
できることとできないことがあります。一部の人々が好むキーワード引数で呼び出すことができるという事実もあります。{}
collections.defaultdict(dict)
dict
>>> dict(spam=1, ham=2)
{'ham': 2, 'spam': 1}
個人的には、有効な識別子ではないキーを使用する場合に適しているため、dict リテラル構文を好みます。
>>> dict(pass=1)
File "<stdin>", line 1
dict(pass=1)
^
SyntaxError: invalid syntax
>>> dict('ham and eggs'=1)
File "<stdin>", line 1
SyntaxError: keyword can't be an expression
(そして、いくつかのキーが有効な識別子ではないという理由だけで、スタイルを混在させます、うん。)
Doug Hellmann は、パフォーマンスの違いを徹底的に比較しています。
tl;dr
CPython 2.7 では、dict() を使用して辞書を作成すると、最大 6 倍の時間がかかり、リテラル構文よりも多くのメモリ割り当て操作が必要になります。{} を使用して辞書を作成します。特に辞書を事前入力する場合は、リテラル構文がうまく機能しない場合を除きます。
Thomas が言ったように、キーワードを指定できるように dict() を使用します。特に、データの初期化などのために大規模な辞書を手動で作成している場合は、キーワード構文を使用できるため、すべての要素で 2 回のキーストローク (および関連する視覚的な煩雑さ) を節約できます。