Помогают ли лямбда-функции Python сократить время выполнения? - PullRequest
0 голосов
/ 01 декабря 2018

Понятно, что Python лямбда функции помогают в создании анонимных функций.Они могут использоваться в других функциях, таких как map (), Reduce (), Filter () и Key () в функциях сортировки.Его также можно использовать для демонстрации и использования лексических замыканий.

Что я хотел бы здесь конкретно знать, так это то, обладают ли лямбда-функции определенным преимуществом по сравнению с обычными функциями с точки зрения времени их выполнения, считая все остальные факторы неизменными ?

Поскольку я новичок в Python, я пытался понять их, сравнивая их аналогично встроенным функциям C ++.Встроенные функции, как я понимаю из C ++, полезны для экономии времени, поскольку они не требуют необходимых «вспомогательных задач», связанных с переключением контекста, которые происходят во время вызовов функций и переходов.
Обеспечивают ли лямбда-функции Python такие же преимущества по сравнению собычные функции?

Некоторые важные посты, которые я нашел полезными, но не обязательно полезными для моего вопроса: Почему полезны лямбды Python? Зачем использовать лямбда-функции?

1 Ответ

0 голосов
/ 01 декабря 2018

Нет.Функциональные объекты, сгенерированные lambda, ведут себя точно так же, как сгенерированные def.Они не выполняются быстрее.(Кроме того, inline в современном C ++ больше не является директивой, указывающей компилятору на встроенную функцию, и имеет мало общего с встраиванием.)

Если хотите, вы можете взглянуть на байт-кодразборка для lambda и эквивалентного def:

import dis

dis.dis(lambda x: x + 2)

print()
def f(x): return x + 2

dis.dis(f)

Выход :

  3           0 LOAD_FAST                0 (x)
              3 LOAD_CONST               1 (2)
              6 BINARY_ADD
              7 RETURN_VALUE

  6           0 LOAD_FAST                0 (x)
              3 LOAD_CONST               1 (2)
              6 BINARY_ADD
              7 RETURN_VALUE

Без разницы.Вы также можете рассчитать их время:

import timeit

def f(x): return x + 2
g = lambda x: x + 2

print(timeit.timeit('f(3)', globals=globals()))
print(timeit.timeit('g(3)', globals=globals()))

Вывод :

0.06977041810750961
0.07760106027126312

В этом цикле лямбда на самом деле заняла больше времени.(Похоже, в комментариях есть некоторая путаница относительно того, достаточно ли мы рассчитываем время работы, чтобы иметь смысл. timeit оборачивает синхронизированный оператор в цикл с миллионами итераций по умолчанию, так что да, так и есть.)

Прежде чем вы спросите, нет, lambda также не имеет недостатка в производительности по сравнению с def.Победитель вышеупомянутой гонки в основном зависит от удачи.lambda и def имеют существенный недостаток по сравнению с полным отказом от использования функции обратного вызова.Например, map -с- lambda имеет значительное снижение производительности по сравнению со списками:

import timeit

print(timeit.timeit('list(map(lambda x: x*x, range(10)))'))
print(timeit.timeit('[x*x for x in range(10)]'))

Вывод :

1.5655903220176697
0.7803761437535286

Ли lambda или def, функции Python дорогие для вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...