А как насчет вложенных функций? Они переопределяются каждый раз, когда вызывается их родительский элемент. Означает ли это, что мы каждый раз переконструируем объект? Если да, то не является ли это крайне неэффективным? Разве частный метод (при условии, что родительская функция является методом) или другая функция не будет намного более эффективным? В этом обсуждении я игнорирую аргументы в пользу вложенности.
Я провожу простой эксперимент, который, похоже, подтверждает мой вышеупомянутый аргумент, поскольку внутренняя версия функции работает медленнее:
Код: Выделить всё
import time
def f(x, y):
def defined_inside(x, y):
return x + y
return defined_inside(x, y)
def defined_outside(x, y):
return x + y
def g(x, y):
return defined_outside(x, y)
start = time.time()
for i in range(10000000):
_ = f(3, 4)
end = time.time()
print("Using inner function it took {} seconds".format(end - start))
start = time.time()
for i in range(10000000):
_ = g(3, 4)
end = time.time()
print("Using outer function it took {} seconds".format(end - start))
Код: Выделить всё
Using inner function it took 2.494696855545044 seconds
Using outer function it took 1.8862690925598145 seconds
Подробнее здесь: https://stackoverflow.com/questions/610 ... -is-called