Мне тоже было любопытно, поэтому я решил выяснить , сколько накладных расходов это понесло.TL; DR, ответ не очень.
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from timeit import timeit
>>> def subfunc():
... pass
...
>>> def no_inner():
... return subfunc()
...
>>> def with_inner():
... def s():
... pass
... return s()
...
>>> timeit('[no_inner() for _ in range(1000000)]', setup='from __main__ import no_inner', number=1)
0.22971350199986773
>>> timeit('[with_inner() for _ in range(1000000)]', setup='from __main__ import with_inner', number=1)
0.2847519510000893
Мой инстинкт был смотреть на проценты (with_inner медленнее на 24%), но это число вводит в заблуждение в этом случае, так как мы никогда не будем простовернуть значение внутренней функции из внешней функции, особенно с функциями, которые на самом деле ничего не делают.
После этой ошибки я решил сравнить ее с другими общими вещами, чтобы увидеть, когда это имеет значение и не имеет значения:
>>> def no_inner():
... a = {}
... return subfunc()
...
>>> timeit('[no_inner() for _ in range(1000000)]', setup='from __main__ import no_inner', number=1)
0.3099582109998664
Глядя на это, мы видим, что это занимает меньше времени, чем создание пустого дикта ( быстрый способ ), поэтому, если вы делаете что-то нетривиальное,это, вероятно, не имеет значения вообще.