python中的l1=list和l2=list()声明不同?

python中的l1=list和l2=list()声明不同?,python,Python,以下声明是否不同 l1=list l2=list() 当我使用类型函数时,结果如下 type(l1) <class 'type'> type(l2) <class 'list'> l1 is l2 False 这些可能表明l1和l2是不同的。为什么l1属于类类型而不是类列表l1=list表示l1变量中列表类的赋值 l2=list M调用list函数来创建列表并将列表分配给l2变量。调用list时,会得到一个it类的实例: >> l = list() &

以下声明是否不同

l1=list
l2=list()
当我使用类型函数时,结果如下

type(l1)
<class 'type'>

type(l2)
<class 'list'>

l1 is l2
False
这些可能表明l1和l2是不同的。为什么l1属于类类型而不是类列表

l1=list表示l1变量中列表类的赋值

l2=list M调用list函数来创建列表并将列表分配给l2变量。

调用list时,会得到一个it类的实例:

>> l = list()
>> l
[]
但当您将列表分配给另一个变量时,您完全是在将所有列表信息转换为另一个变量,并且您可以像使用列表一样使用它们,例如:

>> a = List
>> l1 = a() # same as l1 = List()
>> l1
[]
>> a
List
>> isinstance(l1, a)
True
>> isinstance(l1, List)
True

我希望这能帮助你理解

在Python中,除非用括号要求调用,否则不会调用任何内容。即使没有争论。如果没有括号,您只是引用函数、方法、类或其他任何值。这与其他一些语言不同,比如Ruby或Perl

对于函数或方法,这可能更为明显:

>>> input
<function input>
>>> abs
<function abs>
>>> 'abc'.upper
<function str.upper>
这些都是非常好的值,我们甚至可以将其存储在变量中:

>>> abcupper = 'abc'.upper
当您调用函数或方法时,您知道它的作用。当您调用一个类时,这就是您构造该类实例的方式

无论哪种方式,都需要括号:

>>> abs(-2)
2
>>> list((1, 2, 3))
[1, 2, 3]
…即使没有争论:

>>> 'abc'.upper()
'ABC'
>>> list()
[]
…即使调用先前存储在变量中的方法:

>>> abcupper()
'ABC'

列表不是一个呼叫。list是一个调用。那么l1=list在做什么呢?在Python中,除非您要求调用它,否则不会调用任何东西,带括号的print Hello World呢!在Python2.7?@AGNGazer中,print语句不调用print函数或Python2.7中的任何其他函数。@AGNGazer,尤其是。你可以看到两个人都没有打电话给对方。或者,更简单地说,只是尝试替换print内置,然后使用print语句;您的代码不会被调用。@AGNGazer我想从技术上讲,print最终会调用对象的_str__方法,就像a+b最终调用a.。_add__和/或b._radd__一样,事实上,f实际上只是调用f.。__调用__;…但我认为进入这一领域只会让答案更加混乱,而不是对任何想在这样一个基本问题上寻求帮助的人更有帮助。对象的属性(例如getter和setter)呢?这些不是没有括号的吗?
>>> abcupper()
'ABC'