viernes, 8 de agosto de 2014

Explorar objetos en IPython



Desde el primer momento la ayuda de IPython nos muestra cómo consultar información de un objeto. Lo más frecuente es escribir el nombre del objeto precedido o seguido de uno o dos signos de interrogación:

: objeto?    # Mostrar información de un objeto
: objeto??   # Mostrar además código fuente si es posible

Sin embargo, para obtener información específica de un objeto podemos utilizar las funciones mágicas: %pdoc, %pdef, %psource y %pfile.


Mostrar documentación


Mostrar cadena de documentación o texto de ayuda de un objeto: %pdoc objeto

: import sys
: %pdoc sys
Class docstring:
    This module provides access to some objects used or maintained by the
    interpreter and to functions that interact strongly with the interpreter.

    Dynamic objects:

    argv -- command line arguments; argv[0] is the script pathname if known
    path -- module search path; path[0] is the script directory, else ''
    modules -- dictionary of loaded modules
    ...
    ...

Mostrar línea de definición


Mostrar la línea de definición de un objeto que se pueda invocar: %pdef objeto (Si el objeto es una clase mostrará la información del constructor).

: %pdef alias
alias(self, parameter_s='')

: %pdef writefile
writefile(self, line, cell)

: %pdef sys
Object is not callable.


Mostrar código fuente


Para mostrar si es posible el código fuente de un objeto: %psource objeto

: %psource lsmagic
    @line_magic
    def lsmagic(self, parameter_s=''):
        """List currently available magic functions."""
        return MagicsDisplay(self.shell.magics_manager)


Mostrar archivo de código fuente


Para mostrar el archivo de código fuente completo en el que se define un objeto, abriéndolo en la línea donde empieza su definición: %pfile objeto

: %pfile lsmagic

"""Implementation of basic magic functions.
"""
#-----------------------------------------------------------------------------
#  Copyright (c) 2012 The IPython Development Team.
#
#  Distributed under the terms of the Modified BSD License.
#
#  The full license is in the file COPYING.txt, distributed with this software.
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------


# Stdlib
import io
import json
import sys
from pprint import pformat
...
...


Mostrar información de los identificadores: %who / %whos


Las funciones mágicas %who / %whos proporcionan información sobre identificadores (de variables, listas, módulos, etc.) que se han definido o cargado de forma interactiva en una sesión de trabajo (no sobre lo que se ha definido o cargado de los archivos de configuración).

%who sólo visualizará la lista actual de identificadores mientras que %whos ampliará la información mostrando una tabla con algunos detalles básicos de cada identificador.

: %who
cadena     cadena2     iva     lista     math     os     sys   

: %whos
Variable   Type      Data/Info
--------------------------------
cadena     str       Andalucía
cadena2    bytes     b'Andaluc\xa1a'
iva        int       22
lista      list      n=11
math       module    <module 'math' (built-in)>
os         module    <module 'os' from '/usr/lib/python3.4/os.py'>
sys        module    <module 'sys' (built-in)>


Variables de entorno


Las variables de entorno pueden capturarse en una sesión de trabajo (de una vez) con la función mágica %env. Esta función devuelve un diccionario que contiene todas las variables de entorno con sus valores. Para acceder al valor de una variable utilizaremos como clave su propio nombre.

: variables = %env
: variables?        # Es un diccionario con las variables de entorno
Type:       dict
...
: variables
{'CLICOLOR': '1',
 'CLUTTER_IM_MODULE': 'xim',
 'DBUS_SESSION_BUS_ADDRESS': 'unix:abstract=/tmp/dbus-cdk72jbhpm',
 'DEFAULTS_PATH': '/usr/share/gconf/xubuntu.default.path',
 'DESKTOP_SESSION': 'xubuntu',
 'DISPLAY': ':0.0',
 'GDMSESSION': 'xubuntu',
 'GDM_LANG': 'es_ES',
 etc...

: variables["LOGNAME"]
'antonio'

: variables["SHELL"]
'/bin/bash'