[Python-es] why builtin functions?

Daπid davidmenhur en gmail.com
Mie Ago 6 01:59:36 CEST 2014


On 6 August 2014 00:43, Jose Caballero <jcaballero.hep en gmail.com> wrote:

> En particular, mi colega me pregunta que por que python  implementa la
> funcion  len( )   pero no existe el metodo len() para clases como
> list, string, etc.
>

Sí existe, pero se llama __len__(). La existencia de algunos builtins está
clara: son propiedades muy básicas útiles para muchos objetos diferentes.
Si simplemente existiera el método .len(), un programador perezoso podría
llamar al método correspodiente .size() o .shape() (e.g.: arrays de Numpy),
y trabajar con secuencias sería mucho más difícil. ¿Cómo de larga es?
¿Tiene el método len()?

Al fijar un método mágico y un builtin como alias, Python enfuerza una API
concreta para cualquier tipo de secuencias.

Funciones como max() o min() son operaciones muy comunes, que se benefician
enormemente de estar programadas en C. De nuevo, las secuencias en la
biblioteca estandard podrían haber implementado .max() en C, pero entonces
tendríamos que volver a reimplementarlo para cada nuevo clase que creáramos
(y la API C es dura).

El caso de type() es que el intérprete de Python sabe mejor qué es
cualquier objeto que ellos mismos. Podría haberse implementado como un
método añadido automáticamente a cualquier objeto, pero sería añadir magia
negra porque:

class Nothing():
   pass

tendría métodos definidos, y podría ser sobreescrito:

class Pranker(object):
    def type(self):
         import antrigravity
         return None

Está claro que debería ser de sólo lectura, pero lo haría un caso especial.


/David.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140806/3aa9cf86/attachment.html>


Más información sobre la lista de distribución Python-es