Вы случайно создаете бесконечную рекурсию, перезаписывая глобальную функцию parent родительской функцией logger:
def foo(bar):
def looger():
print('hello from first satatement')
parent() # This calls ....
print('hello from second satatement')
return looger
def parent():
print('printing from parent function')
parent = foo('hi') # this function, what is not what you want
parent()
Это можно исправить, переименовав возвращаемую функцию:
def foo(bar):
def looger():
print('hello from first satatement')
parent()
print('hello from second satatement')
return looger
def parent():
print('printing from parent function')
p = foo('hi')
p()
печать:
hello from first satatement
printing from parent function
hello from second satatement