¿Se considera `list ()` una función?

list es obviamente un tipo incorporado en Python. Vi un comentario en esta pregunta que llama a la list() una función incorporada . Y cuando verificamos la documentación, se incluye, de hecho, en la lista de funciones integradas, pero la documentación nuevamente establece:

En lugar de ser una función, la lista es en realidad un tipo de secuencia mutable

Lo que me lleva a mi pregunta: ¿se considera list() una función? ¿Podemos referirnos a ella como una función incorporada ?

Si estuviéramos hablando de C ++, diría que solo estamos llamando al constructor, pero no estoy seguro si el término constructor aplica a Python (nunca se encontró su uso en este contexto).

list es un type , lo que significa que se define en algún lugar como clase, al igual que int y float .

 >> type(list)  

Si verifica su definición en builtins.py (el código real se implementa en 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 

Entonces, list() no es una función. Solo está llamando a la list.__init__() (con algunos argumentos que son irrelevantes para esta discusión) al igual que cualquier llamada a CustomClass() está haciendo.

Gracias por @jpg por agregar los comentarios: las clases y funciones en Python tienen una propiedad común: ambas se consideran callables , lo que significa que se les permite invocar con () . Hay una función incorporada que se puede callable que comprueba si el argumento dado es llamable:

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

builtins.py también se define en builtins.py :

 def callable(i_e_, some_kind_of_function): # real signature unknown; restred from __doc__ """ Return whether the object is callable (ie, some kind of function). Note that classes are callable, as are instances of classes with a __call__() method. """ pass 

Cuando llama a list() , está invocando al constructor de la clase de list.__init__ ( list.__init__ ).

Si tiene alguna duda sobre el uso del término “constructor” en Python, esta es la palabra exacta que los implementadores de la list eligieron para referirse a __init__ :

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