Per scopi didattici, desidero un notebook IPython che visualizzi (come output da una cella) il codice sorgente della funzione, ma voglio poterlo fare riferimento a più quaderni. Quindi mi piacerebbe visualizzare il codice funzione, in modo simile all'utilizzo della magia %, ma sintassi opportunamente evidenziata.Come mostrare il codice sorgente di una funzione pacchetto nel notebook IPython
Questa è una domanda simile a this question, ma voglio essere in grado di applicarlo a una singola funzione all'interno di un file, piuttosto che al file completo in una volta.
Utilizzando il suggerimento dalla domanda precedente ho inciso un breve codice che funziona nei casi più semplici:
def print_source(module, function):
"""For use inside an IPython notebook: given a module and a function, print the source code."""
from inspect import getmembers, isfunction, getsource
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter
from IPython.core.display import HTML
internal_module = __import__(module)
internal_functions = dict(getmembers(internal_module, isfunction))
return HTML(highlight(getsource(internal_functions[function]), PythonLexer(), HtmlFormatter(full=True)))
Due domande:
- This gist suggerisce che che mostra l'intera funzione potrebbe essere fatto mediante la definizione magia cellulare appropriata. È possibile definire una magia di cella appropriata per mostrare solo una singola funzione, come sopra?
- C'è un modo per farlo senza importare l'intero modulo o un modo più efficace per farlo?