Inicio > Inmersión en Python > El poder de la introspección > type, str, dir, y otras funciones incorporadas | << >> | ||||
diveintopython.org Python para programadores con experiencia |
Python tiene un pequeño conjunto de funciones incorporadas enormemente útiles. Todas las demás funciones están repartidas en módulos. Esto es una decisión consciente de diseño, para que el núcleo del lenguaje no se hinche como en otros lenguajes de script (cof cof, Visual Basic).
La función type devuelve el tipo de dato de cualquier objeto. Los tipos posibles se enumeran en el módulo types. Esto es útil para funciones auxiliares que pueden manejar distintos tipos de datos.
Ejemplo 2.6. Presentación de type
>>> type(1) <type 'int'> >>> li = [] >>> type(li) <type 'list'> >>> import odbchelper >>> type(odbchelper) <type 'module'> >>> import types >>> type(odbchelper) == types.ModuleType 1
La función str transforma un dato en una cadena. Todos los tipos de datos pueden transformarse en cadenas.
Ejemplo 2.7. Presentación de str
>>> str(1) '1' >>> horsemen = ['war', 'pestilence', 'famine'] >>> horsemen.append('Powerbuilder') >>> str(horsemen) "['war', 'pestilence', 'famine', 'Powerbuilder']" >>> str(odbchelper) "<module 'odbchelper' from 'c:\\docbook\\dip\\py\\odbchelper.py'>" >>> str(None) 'None'
En el corazón de nuestra función help está la potente función dir. dir devuelve una lista de los atributos y métodos de cualquier objeto: módulos, funciones, cadenas, listas, diccionarios... prácticamente todo.
Ejemplo 2.8. Presentación de dir
>>> li = [] >>> dir(li) ['append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] >>> d = {} >>> dir(d) ['clear', 'copy', 'get', 'has_key', 'items', 'keys', 'setdefault', 'update', 'values'] >>> import odbchelper >>> dir(odbchelper) ['__builtins__', '__doc__', '__file__', '__name__', 'buildConnectionString']
li es una lista, luego dir(li) devuelve una lista de los métodos de una lista. Advierta que la lista devuelta contiene los nombres de los métodos en forma de cadenas, no los propios métodos. | |
d es un diccionario, luego dir(d) devuelve una lista con los nombres de los métodos de diccionario. Al menos uno de estos, keys, debería serle familiar. | |
Aquí es donde empieza lo interesante. odbchelper es un módulo, por lo que dir(odbchelper) devuelve una lista con todo lo definido en el módulo, incluidos atributos incorporados, como __name__ y __doc__, y cualesquiera otros atributos y métodos que se hayan definido. En este caso, odbchelper tiene un solo método definido, la función buildConnectionString que estudiamos en Conozcamos Python. |
Finalmente, la función callable toma cualquier objeto y devuelve 1 si se puede llamar al objeto, o 0 en caso contrario. Los objetos que pueden ser llamados son funciones, métodos de clase o incluso las propias clases. (Más sobre clases en el capítulo 3).
Ejemplo 2.9. Presentación de callable
>>> import string >>> string.punctuation '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~' >>> string.join <function join at 00C55A7C> >>> callable(string.punctuation) 0 >>> callable(string.join) 1 >>> print string.join.__doc__ join(list [,sep]) -> string Return a string composed of the words in list, with intervening occurrences of sep. The default separator is a single space. (joinfields and join are synonymous)
Las funciones del módulo string están desaconsejadas (aunque mucha gente utiliza la función join), pero el módulo contiene muchas constantes útiles como string.puctuation, que contiene todos los signos habituales de puntuación. | |
string.join es una función que une una lista de cadenas. | |
string.punctuation no puede llamarse; es una cadena. (Una cadena tiene métodos que pueden llamarse, pero la propia cadena no). | |
string.join puede ser llamada; es una función que toma dos argumentos. | |
Cualquier objeto que pueda llamarse puede tener una cadena de documentación. Utilizando la función callable sobre cada uno de los atributos de un objeto, podemos averiguar cuáles nos interesan (métodos, funciones, clases) y cuáles queremos pasar por alto (constantes, etc.) sin saber nada sobre el objeto por anticipado. |
type, str, dir y el resto de funciones incorporadas de Python se agrupan en un módulo especial llamado __builtins__. (Con dos subrayados antes y después). Por si sirve de ayuda, puede interpretarse que Python ejecuta automáticamente from __builtins__ import * al iniciarse, con lo que se importan todas las funciones “incorporadas” en el espacio de nombres de manera que puedan utilizarse directamente.
La ventaja de interpretarlo así es que se puede acceder a todas las funciones y atributos incorporados como un grupo, obteniendo información sobre el módulo __builtins__. E imagíneselo, tenemos una función para ello: se llama help. Inténtelo usted y prescinda ahora de la lista; nos sumergiremos más tarde en algunas de las principales funciones. (Algunas de las clases de error incorporadas, como AttributeError, deberían resultarle familiares).
Ejemplo 2.10. Atributos y funciones incorporados
>>> from apihelper import help >>> help(__builtins__, 20) ArithmeticError Base class for arithmetic errors. AssertionError Assertion failed. AttributeError Attribute not found. EOFError Read beyond end of file. EnvironmentError Base class for I/O related errors. Exception Common base class for all exceptions. FloatingPointError Floating point operation failed. IOError I/O operation failed. [...snip...]
Python se acompaña de excelentes manuales de referencia, que debería usted leer detenidamente para aprender todos los módulos que Python ofrece. Pero mientras en la mayoría de lenguajes debe usted volver continuamente sobre los manuales (o las páginas de manual, o, Dios le socorra, MSDN) para recordar cómo se usan estos módulos, Python está ampliamente autodocumentado. |
Lecturas complementarias
Argumentos opcionales y con nombre | 1 2 3 4 5 6 7 8 9 | Obtención de referencias a objetos con getattr |