Running cProfile is a bit of a pain.
You have to pass your function and all its scope as a string to cProfile, which is.. just a pain.
cProfile.run(''' def test(n): x = 1 for i in range(n): x = x * 2 ''')
iPython has a magic function that lets you use the current scope.
def test(n): x = 1 for i in range(n): x = x * 2 %prun test(100000) 4 function calls in 0.753 CPU seconds Ordered by: internal time ncalls tottime percall cumtime percall filename:lineno(function) 1 0.752 0.752 0.753 0.753 :1(test) 1 0.002 0.002 0.002 0.002 {range} 1 0.000 0.000 0.753 0.753 :1() 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}