list()是否被视为函数?

时间:2018-12-06 11:02:00

标签: python list function

list在Python中显然是a built-in type。我在this问题下看到一条评论,该评论称list()内置函数。当我们检查文档时,确实包含在Built-in functions list中,但是文档再次指出:

  

列表实际上不是可变函数,而是可变的序列类型

哪个使我想到了一个问题:list()被视为函数吗?我们可以将其称为内置函数吗?

如果我们在谈论C ++,我会说我们只是在调用构造函数,但是我不确定constructor一词是否适用于Python(在这种情况下从未遇到过)。

2 个答案:

答案 0 :(得分:10)

listtype,这意味着它在某处被定义为类,就像intfloat一样。

>> 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