roggerg
Скажите я правильно понимаю что в ситуации когда одна функция вложена в другую, то при вызове внешней функции, внутрення будет работать только если в коде будет вызов внутренней функции.
Вложенная функция работает так же, как невложенная. Если она определена, то её надо вызвать, чтобы она сработала. А вызывается она там, где видна, а видна она только внутри функции, в которой определена.
>>> def f():
... def g(x):
... print('g')
... return x * 2
... print('f')
... print(g(8))
... print('end')
...
>>> f()
f
g
16
end
>>>
Вложенные функции к декораторам никак не относятся. Это декораторы используют вложенные функции часто.
Вот декоратор без каких-либо вложенных функций
>>> def dec(func):
... return 1
...
>>> @dec
... def f(x):
... return x * 2
...
>>> f
1
>>>
>>> def dec(func):
... return lambda: 'nothing'
...
>>> @dec
... def f(x):
... return x * 2
...
>>> f
<function dec.<locals>.<lambda> at 0xb73dc5cc>
>>> f()
'nothing'
>>>
>>> def g():
... return 'g'
...
>>> def dec(func):
... return g
...
>>> @dec
... def f(x):
... return x * 2
...
>>> f
<function g at 0xb75183d4>
>>> f()
'g'
>>>
>>> def g(x):
... print('g')
... return x
...
>>> def dec(func):
... return lambda x: g(func(x))
...
>>> @dec
... def f(x):
... return x * 2
...
>>> f
<function dec.<locals>.<lambda> at 0xb74375cc>
>>> f(8)
g
16
>>>