[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