[Python] Ottenere il codice di una funzione o metodo.

Dario Bertini berdario a gmail.com
Mar 29 Lug 2014 11:31:49 CEST


Se quello che vuoi fare è dare un'occhiata al codice del modulo che stai usando

modulo.__file__

ti restituisce il nome del file. guardare i sorgenti in questo modo è
l'unica soluzione esaustiva imho


detto questo, inspect.getsource() e inspect.getsourcelines()
funzionano bene, ma solo per funzioni di cui c'è codice python a
disposizione

esempio (Python2, visto che in Python3 hanno eliminato i 2 moduli separati)

>>> import inspect
>>> inspect.getsource(cPickle.load)
[SNIP]
TypeError: <built-in function load> is not a module, class, method,
function, traceback, frame, or code object
>>> import pickle
>>> inspect.getsource(pickle.load)
'def load(file):\n    return Unpickler(file).load()\n'

come vedi dal TypeError, dev'essere un modulo, una classe, un metodo,
una funzione, un traceback, un frame o un oggetto codice

un caso non coperto, sono gli slot wrapper, come per esempio
datetime.__str__ il che è strano perchè pensavo che fossero riservati
a classi/metodi definiti in codice C, ma in
/usr/lib/python3.4/datetime.py il metodo __str__ è bello che presente

gli oggetti definiti nella repl non hanno sorgente associato, ma ci
puoi girare attorno con questa libreria:
https://github.com/uqfoundation/dill

(dill.source.getsource[lines] sono le funzioni che t'interessano)


-- 
xmpp: berdario at gmail.com
bitmessage: BM-2cTYXfGiSTsnx3righ6aHcJSWe4MV17jDP
gpg fingerprint: 3F8D53518012716C4EEF7DF67B498306B3BF75A0 (used just
for signing commits)


Maggiori informazioni sulla lista Python