list
在Python中显然是a built-in type。我在this问题下看到一条评论,该评论称list()
是内置函数。当我们检查文档时,确实包含在Built-in functions list中,但是文档再次指出:
列表实际上不是可变函数,而是可变的序列类型
哪个使我想到了一个问题:list()
被视为函数吗?我们可以将其称为内置函数吗?
如果我们在谈论C ++,我会说我们只是在调用构造函数,但是我不确定constructor
一词是否适用于Python(在这种情况下从未遇到过)。
答案 0 :(得分:10)
list
是type
,这意味着它在某处被定义为类,就像int
和float
一样。
>> type(list)
<class 'type'>
如果您在builtins.py
中检查其定义(实际代码在C中实现):
class list(object):
"""
Built-in mutable sequence.
If no argument is given, the constructor creates a new empty list.
The argument must be an iterable if specified.
"""
...
def __init__(self, seq=()): # known special case of list.__init__
"""
Built-in mutable sequence.
If no argument is given, the constructor creates a new empty list.
The argument must be an iterable if specified.
# (copied from class doc)
"""
pass
因此,list()
不是函数。就像任何对list.__init__()
的调用一样,它只是在调用CustomClass()
(带有一些与本讨论无关的参数)。
感谢@jpg添加注释:Python中的类和函数具有一个公共属性:它们都被视为 callables ,这意味着它们可以用{{1}来调用}。有一个内置函数()
,用于检查给定的参数是否可调用:
callable
>> callable(1)
False
>> callable(int)
True
>> callable(list)
True
>> callable(callable)
True
也在callable
中定义:
builtins.py
答案 1 :(得分:2)
调用list()
时,您正在调用list
类(list.__init__
)的构造函数。
如果您对在Python中使用“构造函数”一词有疑问,这是list
的实现者选择引用__init__
的确切词:
https://github.com/python/cpython/blob/master/Objects/listobject.c#L2695