2012-09-20 10 views
5

Spesso mi trovo a usare librerie di terze parti - pacchetti e moduli - che mancano di documentazione sufficiente. Lo studio del codice sorgente diventa quindi essenziale, ma può anche essere un compito un po 'noioso. Io (come immagino tutti) utilizzare le funzioni dir() e help() per iniziare e recentemente ho iniziato a utilizzare il modulo inspect. Mi piacerebbe sapere quali sono i "metodi" che usi per immergerti nel codice mal documentato e come aumentare l'efficienza nel farlo. Aiuto molto apprezzato.Python: introspezione pratica

risposta

5

Trovo che lo strumento IPython sia indispensabile per questo tipo di attività. I comandi magici ? (show docstring) e ?? (show source), abbinati all'eccellente sistema di completamento di IPython e all'introspezione di oggetti dal vivo, fanno davvero la differenza per me.

una sessione di esempio:

In [1]: import sphinx.writers <TAB> 
# see available modules and packages - narrow down 

In [1]: import shpinx.writers.manpage as manpage 
In [2]: manpage.<TAB> 
# list and complete on the module's contents 

In [3]: manpage.Writer? 
# nicely formatted docstring follows 

In [4]: manpage.Writer?? 
# nicely formatted source code follows 

In [5]: %edit manpage 
# open module in editor 
# it really helps if you use something like ctags at this point 

In [6]: %edit manpage.Writer 
# open module in editor - jump to class Writer 

Purtroppo, non tutto il codice è ispezionabile in questo modo. Pensa ai progetti che fanno cose in moduli senza averli inclusi in un if __name__ == '__main__' o in progetti che fanno molto affidamento sulla magia (sh mi viene in mente).

+1

@ gvalkov - +1 per IPython. – root

2

Mi piacerebbe costruire callgraph con http://pycallgraph.slowchop.com/ o doxygen.

Infatti, il modulo AST e alcuni altri consentono un'analisi statistica relativamente indolore. Quello che mi piacerebbe di più è in qualche modo eseguire analisi dinamiche (perché, il valore di ciò che viene chiamato "func1" può cambiare e le chiamate possono diventare completamente diverse).

+0

@ Bob - + 1, non ne avevo sentito parlare, sembra interessante. Grazie. – root

+0

@root: il problema è che il callgraph statico potrebbe non essere sufficiente per il linguaggio dinamico come python :( –

Problemi correlati