An extension for IPython to embed a pythontutor iframe that can illustrate the code in the current cell.
Licence CC BY-NC-ND - Thierry Parmentelat
+++
pythontutor.com
illustrations in Jupyterthis notebook is stored in text (markdown) format using jupytext, make sure to have this tool installed if you want to open it locally
+++
$ pip3 install ipythontutor
+++
As github won't render iframes embedded in a ipynb
, here's a screenshot
+++
# required to load the extension
%load_ext ipythontutor
In its simplest form, the code in the cell is handed over (as python3) to the excellent http://pythontutor.com/
%%ipythontutor
original = reference = [1, 2]
original[0] = 'boom'
print(reference)
%%ipythontutor height=400 width=850
def fact(n):
return 1 if n <= 1 else n * fact(n-1)
original = [fact(3), fact(4)]
reference = original[:]
original[0] = 'boom'
print(reference)
If your page is smaller than what pythontutor can reasonably work with, you can specify a scaling ratio.
%%ipythontutor width=600 height=200 ratio=0.7
import copy
original = [1, [2, 3]]
reference = copy.deepcopy(original)
original[1][0] = 'boom'
print(reference)
%%ipythontutor linkButton=true
def fact(n):
return 1 if n <= 1 else n * fact(n-1)
original = [fact(3), fact(4)]
reference = original[:]
original[0] = 'boom'
print(reference)
The following list shows the settings that can be tweaked on the magic line. See also this page about embedding pythontutor for more details on these settings:
from ipythontutor import Magics
for var, default in Magics.defaults.items():
print(f"{var:>20} - defaults to - {default:<}")
proto
The default is to use https
to reach pythontutor
, as this is exepcted to work in most cases. If that's not working for you, instead of setting proto=http
on each magic cell, you can change this globally - like any other default btw - this way:
from ipythontutor import Magics
Magics.defaults['proto'] = 'http'
%%ipythontutor py=2
print "Hey"
original = [1, 2]
copy = original[:]
original[0] = 'boom'
Check out another pure approach, that does not rely on pythontutor, at the nbtutor
project.