Лямбда-функции лучше или итерации? - PullRequest
1 голос
/ 15 марта 2012

Итерации лучше или лямбда-функции лучше в отношении обработки времени или использования памяти и других вещей?

например:

x = [10, 20, 30]

for y in x:
    if y>10 or y<20:
        print y

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

Ответы [ 3 ]

5 голосов
/ 15 марта 2012

Итераторы и лямбды-две разные вещи. Лямбда - это простая встроенная функция, а итератор - это объект, который возвращает последовательные объекты. В вашем примере есть две основные проблемы: вы тестируете x вместо y, и все значения в x будут приниматься за y>10 or y<20. Таким образом, исправляя их, ваш пример может быть написан с использованием итератора и лямбда-выражения, например:

for value in filter(lamdba y: y < 10 or y > 20, x):
    print(value)

Есть несколько способов сделать это, но с точки зрения производительности это зависит от того, какие данные вы обрабатываете, как вы их обрабатываете и сколько вы обрабатываете. См. http://wiki.python.org/moin/PythonSpeed/PerformanceTips для полезного руководства.

3 голосов
/ 15 марта 2012

Для вашего случая классический цикл, очевидно, лучше, так как вы не хотите создавать новый список или генератор.

Отсутствие такого объекта делает его более эффективным в памяти и не вызывает функцию для каждого из них.элемент делает его более производительным.

1 голос
/ 15 марта 2012

Я считаю, что нотация понимания списка гораздо легче читать, чем функциональная нотация, особенно с учетом того, что сложность отображаемого выражения возрастает. Кроме того, понимание списка выполняется намного быстрее, чем решение с использованием map и lambda. Это связано с тем, что при вызове лямбда-функции создается новый кадр стека, а выражение в понимании списка оценивается без создания нового кадра стека. >> http://python -history.blogspot.com / 2010/06 / from-list-comppresions-to-generator.html

Другими словами, если у вас есть выбор между лямбда и циклом / пониманием / генератором, используйте последний. Я предполагаю, что самый питонический способ написать ваш пример - что-то вроде

 print [y for y in x if y < 20]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...