37
$ 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

なぜ一方を他方の上に使用するのですか?

4

5 に答える 5

59

私は、句読点よりも単語を好む人の 1 人です。たとえば、Perl よりも Python を選んだ理由の 1 つです。「人生はブレースなしでより良い」(笑顔のティーンエイジャーの漫画が描かれたTシャツに付いていた古いPythonのモットー;-)、結局のところ(元々はグループ化のためにブレースとインデントを参照することを意図していましたが、 、ブレースはブレースです!-)。

数ナノ秒の「支払い」(中括弧、大括弧などの代わりに明確で読みやすい短い単語を使用する目的で)は、一般的に手頃な価格です(ほとんどの場合、組み込みの名前空間へのルックアップのコストであり、毎回支払う価格です)組み込みの型または関数を使用すると、ループからいくつかのルックアップを巻き上げることで、それを穏やかに最適化できます)。

したがって、私は通常、 for 、 for の代わりに、 for 、 for などを書くのが好きな人です。これは、dict()発音{}可能なコードの一般的なスタイルの好みにすぎません。私が別のスタイルを使用する既存のコードベースに取り組んでいるとき、または新しいプロジェクトのチームメイトが別の方法で強い好みを持っているとき、もちろんそれを受け入れることができます (ただし、チームメイトの場合、少し伝道しようとすることはありませんが、 ;-)。list(L)L[:]list()[]tuple()()

于 2010-04-30T14:43:33.750 に答える
24

d=dict()locals()then globals()then__builtins__でルックアップが必要ですが、そうでd={}はありません

于 2010-04-30T14:12:29.217 に答える
10

人々が (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

(そして、いくつかのキーが有効な識別子ではないという理由だけで、スタイルを混在させます、うん。)

于 2010-04-30T14:23:35.823 に答える
7

Doug Hellmann は、パフォーマンスの違いを徹底的に比較しています。

tl;dr

CPython 2.7 では、dict() を使用して辞書を作成すると、最大 6 倍の時間がかかり、リテラル構文よりも多くのメモリ割り当て操作が必要になります。{} を使用して辞書を作成します。特に辞書を事前入力する場合は、リテラル構文がうまく機能しない場合を除きます。

于 2012-12-05T20:25:18.693 に答える
1

Thomas が言ったように、キーワードを指定できるように dict() を使用します。特に、データの初期化などのために大規模な辞書を手動で作成している場合は、キーワード構文を使用できるため、すべての要素で 2 回のキーストローク (および関連する視覚的な煩雑さ) を節約できます。

于 2010-05-01T02:39:10.020 に答える