12

空の Python リスト/辞書を作成するために使用できる 2 つの形式の構文の間に具体的な違いはありますか?

l = list()
l = []

と:

d = dict()
d = {}

一方を使用する方が他方よりも好ましいかどうか疑問に思っています。

4

4 に答える 4

20

関数形式は実行時にコンストラクターを呼び出して新しいインスタンスを返しますが、リテラル形式ではコンパイラーがコンパイル時にそれを「作成」します (実際には、新しいオブジェクトになるバイトコードを発行します)。前者は、(何らかの理由で) クラスがローカルで異なる型に再バインドされている場合に役立ちます。

>>> def f():
...   []
...   list()
...   {}
...   dict()
... 
>>> dis.dis(f)
  2           0 BUILD_LIST               0
              3 POP_TOP             

  3           4 LOAD_GLOBAL              0 (list)
              7 CALL_FUNCTION            0
             10 POP_TOP             

  4          11 BUILD_MAP                0
             14 POP_TOP             

  5          15 LOAD_GLOBAL              1 (dict)
             18 CALL_FUNCTION            0
             21 POP_TOP             
             22 LOAD_CONST               0 (None)
             25 RETURN_VALUE        
于 2012-06-13T18:03:00.217 に答える
5

主な違いは、一方のフォームには名前ルックアップが含まれ、もう一方には含まれていないことです。この違いを示す例:

def list():
    return {}

print []
print list()

版画

[]
{}

もちろん、そんなばかげたことをするべきではありません。

于 2012-06-13T18:03:25.027 に答える
2

私の直感は、一貫性がある限り、どちらも許容できると言っています。

于 2012-06-13T18:02:02.010 に答える
0

私は違いを認識していませんが、主に文体の好みです。

于 2012-06-13T18:01:37.663 に答える