изучение Python - помните о идиомах! - PullRequest
4 голосов
/ 22 сентября 2010

Я заядлый ученик языка Python уже довольно давно.Имея более 6 лет опыта работы с Java [профессионалами] в сочетании с небольшим опытом работы с C ++ [хобби] ​​- справедливо сказать, что моя точка зрения глубоко укоренилась в идиомах, возникающих в таких статически типизированных, строго связанных языках.Короче говоря - я могу сказать, что старомодный образ мышления оказывает значительное влияние на мой стиль программирования.

Моя причина выбрать Python, а не Ruby, была в основном совпадением, так как я получил некоторую работу с неполной занятостью, которую яможет помочь с использованием Python.Прошло 2 недели, и все было просто революцией!вооруженный IDLE и Базовая ссылка Python , это было одно откровение за другим.Это похоже на то, что чувствовал бы классический физик, если бы гравитация перестала существовать!

В любом случае, я понимаю, что для того, чтобы быть эффективным с питоном, потребуется некоторое время реальной практической работы.больше, чем синтаксис, я чувствую, что это из-за того, как мыслит мой разум.однако, как бы я ни был подготовлен, есть одна особенность, которая немного беспокоит меня - python предлагает слишком много идиом для выполнения одной и той же вещи.Например, составление списка и фильтрация (...), apply (...) и eval (...) и т. Д., Хотя эти идиомы не являются полностью заменяемыми, но я считаю, что их основные цели в значительной степени пересекаются,я понимаю, что в основе их использования должно лежать повышение производительности.Тем не менее, как новичок, каков наилучший способ получить образование и обуздать 'n' способы решения одной и той же проблемы?

Ответы [ 7 ]

4 голосов
/ 22 сентября 2010

список понимания и фильтра (...), применять (...) и eval (...) и т. Д., Хотя эти идиомы не являются полностью заменяемыми, но я считаю, что их основные цели перекрываются св значительной степени

Питонический путь будет таким: используйте простые циклы for или списочные понимания.filter и map являются остатками старых версий языка.Гвидо хотел, чтобы их удалили в один момент, но оказалось, что есть несколько допустимых вариантов использования и достаточно людей, которые хотели бы, чтобы они остались (также см. эту ветку ).Не используйте eval.

Не беспокойтесь о производительности, если только это не станет проблемой (и в этом случае самый простой способ - попытка использовать высоко оптимизированные функции в стандартной библиотеке) - этолучший способ большую часть времени).

Я думаю, что в целом Python действительно прост, пытаясь обеспечить один (очевидный) способ сделать что-то, хотя существуют действительные (большие или меньшие) вариации и мнения по некоторым темам.конечно же, различаются.

Подобрать идиомы Python можно так же просто, как просматривать этот сайт и уделять особое внимание высоко голосуемым ответам на вопросы по Python (в большинстве случаев существует определенный консенсус по поводу наилучшего способа).делать вещи).

3 голосов
/ 23 сентября 2010

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

2 голосов
/ 23 сентября 2010

Тип

import this

в безделье

2 голосов
/ 23 сентября 2010

Обязательно прочитайте Идиомы и анти-идиомы , которые являются частью официальной документации Python. Также обязательно прочитайте PEP8 в стиле Python.

2 голосов
/ 22 сентября 2010

Для начала, вы должны прочитать это:

http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html

1 голос
/ 22 сентября 2010

Извините, если мой ответ не такой длинный, как ваш вопрос, но, в любом случае, вот так:

Прежде всего о listcomps / filter / apply / eval. Если вы собираетесь использовать фильтр или применить его, вам гораздо лучше использовать понимание списка (или выражение генератора) или цикл for, - насколько я знаю, фильтр, отображение, уменьшение и применение - это, в основном, атавизмы можно игнорировать безопасно. Eval не имеет ничего общего ни с одним из них, он просто оценивает строку как код Python. Вы, вероятно, не должны использовать его, если у вас нет очень веских причин для этого (подсказка: нет).

Redioms: по большей части, в python для данной проблемы существует оптимальный «способ сделать это», который следует использовать в 99% подобных случаев. Примеры: нужно проанализировать / преобразовать / сгенерировать xml? Используйте lxml . Нужно сделать сетевой / почти любой другой тип ввода / вывода? Используйте витой . И так далее. Конечно, есть альтернативы, но в большинстве случаев действительно есть один оптимальный способ сделать что-то. Это еще более актуально, если вы просто работаете со стандартной библиотекой, поскольку она предоставляет множество оптимальных решений для распространенных проблем (хотя она содержит некоторые довольно бесполезные вещи).

0 голосов
/ 22 сентября 2010

Забавно, вы должны сказать следующее: «это было одно откровение за другим. Это похоже на то, что чувствовал бы классический физик, если бы гравитация перестала существовать!»

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