| You are here: Inicio > Inmersión en Python > El poder de la introspección > Uso de type, str, dir y otras funciones incorporadas | << >> | ||||
Inmersión en PythonPython de novato a experto |
|||||
Python cuenta con 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.
>>> type(1)<type 'int'> >>> li = [] >>> type(li)
<type 'list'> >>> import odbchelper >>> type(odbchelper)
<type 'module'> >>> import types
>>> type(odbchelper) == types.ModuleType True
La función str transforma un dato en una cadena. Todos los tipos de datos pueden transformarse en cadenas.
>>> str(1)'1' >>> jinetes = ['guerra', 'peste', 'hambre'] >>> jinetes ['guerra', 'peste', 'hambre'] >>> jinetes.append('Powerbuilder') >>> str(jinetes)
"['guerra', 'peste', 'hambre', 'Powerbuilder']" >>> str(odbchelper)
"<module 'odbchelper' from 'c:\\docbook\\dip\\py\\odbchelper.py'>" >>> str(None)
'None'
En el corazón de nuestra función info 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.
>>> 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 todos los métodos de una lista. Advierta que la lista devuelta no contiene los propios métodos, sino sus nombres en forma de cadenas. | |
| d es un diccionario, así que dir(d) devuelve una lista con los nombres de los métodos de un 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 cosas definidas en el módulo, incluidos atributos incorporados como __name__, __doc__ y cualesquiera otros atributos y métodos que se hayan definido. En este caso, odbchelper sólo tiene definido un método, la función buildConnectionString que estudiamos en el Capítulo 2. |
Finalmente, la función callable toma cualquier objeto y devuelve True si se puede invocar al objeto, o False en caso contrario. Los objetos que pueden ser invocados son funciones, métodos de clase o incluso las propias clases. (Más sobre clases en el siguiente capítulo.)
>>> import string >>> string.punctuation'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~' >>> string.join
<function join at 00C55A7C> >>> callable(string.punctuation)
False >>> callable(string.join)
True >>> 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)
| Se desaconseja el uso de las funciones del módulo string (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 invocarse; es una cadena. (Una cadena tiene métodos a los que invocar, pero no podemos hacerlo con la propia cadena.) | |
| string.join puede ser invocada; es una función que toma dos argumentos. | |
| Cualquier objeto al que se pueda invocar 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 __builtin__ (con dos subrayados antes y después). Por si sirve de ayuda, puede interpretarse que Python ejecuta automáticamente from __builtins__ import * al inicio, 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 en grupo, obteniendo información sobre el módulo __builtins__. Y fíjese, tenemos una función para ello: se llama info. Inténtelo usted y prescinda ahora de la lista; nos sumergiremos más tarde en algunas de las funciones principales. (Algunas de las clases de error incorporadas, como AttributeError, deberían resultarle familiares.)
>>> from apihelper import info >>> import __builtin__ >>> info(__builtin__, 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. [...cortado...]
| 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 para recordar cómo se usan estos módulos, Python está autodocumentado en su mayoría. | |
<< Argumentos opcionales y con nombre |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
Obtención de referencias a objetos con getattr >> |