空の Python リスト/辞書を作成するために使用できる 2 つの形式の構文の間に具体的な違いはありますか?
l = list()
l = []
と:
d = dict()
d = {}
一方を使用する方が他方よりも好ましいかどうか疑問に思っています。
空の Python リスト/辞書を作成するために使用できる 2 つの形式の構文の間に具体的な違いはありますか?
l = list()
l = []
と:
d = dict()
d = {}
一方を使用する方が他方よりも好ましいかどうか疑問に思っています。
関数形式は実行時にコンストラクターを呼び出して新しいインスタンスを返しますが、リテラル形式ではコンパイラーがコンパイル時にそれを「作成」します (実際には、新しいオブジェクトになるバイトコードを発行します)。前者は、(何らかの理由で) クラスがローカルで異なる型に再バインドされている場合に役立ちます。
>>> 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
主な違いは、一方のフォームには名前ルックアップが含まれ、もう一方には含まれていないことです。この違いを示す例:
def list():
return {}
print []
print list()
版画
[]
{}
もちろん、そんなばかげたことをするべきではありません。
私の直感は、一貫性がある限り、どちらも許容できると言っています。
私は違いを認識していませんが、主に文体の好みです。