`List ()` считается функцией? - PullRequest
       2

`List ()` считается функцией?

0 голосов
/ 06 декабря 2018

list - это, очевидно, встроенный тип в Python.Я увидел комментарий под этим вопросом, который вызывает list() a встроенную функцию .И когда мы проверяем документацию, она действительно включается в Список встроенных функций , но в документации снова говорится:

Вместо того, чтобы быть функцией, список на самом делеизменяемый тип последовательности

Что приводит меня к моему вопросу: считается ли list() функцией?Можем ли мы назвать это встроенной функцией ?

Если бы мы говорили о C ++, я бы сказал, что мы просто вызываем конструктор, но я не уверен, применим ли термин constructor к Python (никогда не сталкивался с его использованием в этом контексте).

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Когда вы вызываете list(), вы вызываете конструктор класса list (list.__init__).

Если у вас есть какие-либо сомнения относительно использования термина "конструктор" в Pythonэто точное слово, которое разработчики list выбрали для обозначения __init__:

https://github.com/python/cpython/blob/master/Objects/listobject.c#L2695

0 голосов
/ 06 декабря 2018

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имеют общее свойство: они оба считаются вызываемыми , что означает, что им разрешено вызываться с ().Существует встроенная функция callable, которая проверяет, может ли данный аргумент вызываться:

>> callable(1)
False
>> callable(int)
True
>> callable(list)
True
>> callable(callable)
True

callable также определено в builtins.py:

def callable(i_e_, some_kind_of_function): # real signature unknown; restored from __doc__
    """
    Return whether the object is callable (i.e., some kind of function).

    Note that classes are callable, as are instances of classes with a
    __call__() method.
    """
    pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...