Also defined during run-time, but in every call of bar() the innter_func is redefined again and again.

examples/advanced/runtime-inner-def.py
import random

def foo():
    return random.random()

print foo()
print foo()

def bar(a, b = foo()):

    def inner_func(x, y = foo()):
        return [x, y]

    print 'inner', inner_func(a)
    return [a, b]

print bar(1)
print bar(2)

examples/advanced/runtime-inner-def.out
0.821210904648
0.925337844251
inner [1, 0.9243163421154859]
[1, 0.38535850141949013]
inner [2, 0.5665772632462458]
[2, 0.38535850141949013]