初始化空Python数据结构

Jas*_*n R 12 python dictionary list

在可用于创建空Python列表/词典的两种语法形式之间是否存在任何明显的差异,即

l = list()
l = []
Run Code Online (Sandbox Code Playgroud)

和:

d = dict()
d = {}
Run Code Online (Sandbox Code Playgroud)

我想知道使用一个是否优于另一个.

Ign*_*ams 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        
Run Code Online (Sandbox Code Playgroud)

  • @Robru:这是无关的.使用`def f(a,b,cache = dict())`也可以. (7认同)

Sve*_*ach 5

主要区别在于一个表单包含名称查找,而另一个表单不包括.说明这种差异的示例:

def list():
    return {}

print []
print list()
Run Code Online (Sandbox Code Playgroud)

版画

[]
{}
Run Code Online (Sandbox Code Playgroud)

当然你绝对不应该做这样的废话.