Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Python: Общие вопросы > использование print в lambda-функции |
Автор: pythonwin 24.8.2006, 15:52 | ||
Пожалуйста, помогите: Есть код:
ругается на "print" как обойти эту проблему? |
Автор: Void 24.8.2006, 16:18 |
Никак. Лямбда в Питоне может содержать только выражение, но не оператор. Используй цикл. |
Автор: pythonwin 24.8.2006, 16:26 | ||
спасибо! |
Автор: Artemios 24.8.2006, 21:18 | ||||
Нет, в обход пойти можно:
|
Автор: Void 24.8.2006, 21:32 |
Artemios, по правде говоря, я все равно предпочёл бы видеть в коде for. Потому что map — это преобразование списка, а не просто итерация. |
Автор: pythonwin 25.8.2006, 07:04 | ||||
Artemios, спасибо! Интересный способ. ![]()
Мои цели: 1) увеличить скорость выполнения (читал статью что map, reduce и т.д. быстрее for, while) 2) сделать код более читабельным (представьте, что у Вас 300-400 строк проверок if и циклов for или while) сделал примерно вот так:
может скорость и не увеличилась, но читать код уже намного легче! |
Автор: albertn 25.8.2006, 09:02 |
Но все-таки с идеологической точки зрения функции обработки списков в питоне должны применяться исключительно для обработки списков. Это ведь не Лисп. Но если очень надо, то в принципе можно. И еще, функции вывода на экран выполняются гораздо дольше, чем та разница во времени выполнения между циклами и функциями map, reduce. Так что на скорость в данном случае почти не повлияет. |
Автор: Artemios 25.8.2006, 13:05 | ||||
мм...
нет, наверно все-таки твой вариант легче читать ![]()
А вот это верно. |
Автор: pythonwin 25.8.2006, 13:37 | ||
Artemios, +1 Спасибо! |
Автор: albertn 25.8.2006, 13:42 |
поддерживаю |
Автор: cherep 9.12.2006, 03:20 | ||||
Раз пошла такая пьянка, то вот Вам решению полностью в 1 строку:
А вообще хочу сказать, что делать это категорически не стоит, ибо это совершенно non-pythonic, и совершенно не прибавляет читабильности ну ни на йоту. Не забывайте, что у питона есть вполне определенная идеология (import this - изучать полчаса ![]() И еще одно предостережение - один из самых страшных грехов - преждевременная оптимизация. Программа должна быть в первую очередь красивой и понятной. Ах да, забыл о главном. Существенно более pythonic будет так:
|
Автор: Artemios 11.12.2006, 09:07 |
И существенно быстрее ![]() Как это мы только все забыли про join? ![]() |
Автор: dvska 11.12.2006, 15:30 | ||||
Не совсем в тему, но Надеюсь, все знакомы с функцией http://docs.python.org/lib/module-pprint.html?
|
Автор: Artemios 11.12.2006, 15:50 | ||
Често не знал, спасибо ![]() в тему, в тему: она (pprint) и в лямбду замечательно лезет (тема топика):
![]() |
Автор: cherep 12.12.2006, 00:37 | ||||||
Не забываем про карринг (привет, Haskell ![]() Проще уж тогда
Или вообще избавиться от лишней переменной PrintL |
Автор: Artemios 12.12.2006, 00:46 |
Таки человеку лямбда нужна была ![]() |
Автор: Virtuos86 20.1.2010, 05:49 | ||
fixed: Вот этот вариант чуть пошустрее будет аналогичного:
Если уж делать что-нибудь плохое, то нужно это делать хорошо ![]() |