Выполнение в Google поиска «pythonic» открывает широкий спектр интерпретаций. На странице википедии написано:
Распространенным неологизмом в сообществе Python является pythonic, который может иметь широкий диапазон значений, связанных со стилем программы. Сказать, что код является pythonic, значит сказать, что он хорошо использует идиомы Python, что он естественный или свободно говорит на языке. Аналогичным образом, сказать, что интерфейс или языковая особенность является питонической, значит сказать, что она хорошо работает с идиомами Python, что ее использование хорошо сочетается с остальной частью языка.
Здесь также обсуждается термин «не пифонический»:
В отличие от этого, отличительной чертой непифонического кода является то, что он пытается написать код на C ++ (или Lisp, Perl или Java) на Python, то есть обеспечивает грубую транскрипцию, а не идиоматический перевод форм с другого языка. Концепция питоничности тесно связана с минималистской философией Python, заключающейся в удобочитаемости и избегании подхода «существует более одного способа сделать это». Неразборчивый код или непонятные идиомы не пифоничны.
Что означает термин «питон»? Как мне научиться эффективно применять его на практике?
Ответы:
Я обнаружил, что у большинства людей есть свои собственные интерпретации того, что на самом деле означает «питон». Из Википедии:
Я обнаружил, что больше, чем нет, больше «питонических» примеров на самом деле происходит от людей, пытающихся быть умными с идиомами Python и (опять же, чаще, чем нет), делающих свой код практически нечитаемым (что не является Pythonic).
Пока вы придерживаетесь идиом Python и не пытаетесь использовать стили C ++ (или другого языка) в Python, значит, вы Pythonic.
Как указывает WorldEngineer, PEP8 является хорошим стандартом для подражания (и если вы используете VIM, есть плагины для линтинга PEP8).
Правда, в конце концов, если ваше решение работает и не является абсолютно ужасно необслуживаемым и медленным, кого это волнует? В большинстве случаев ваша задача состоит в том, чтобы выполнить задачу, а не написать самый изящный, питонский из возможных кодов.
Другая сторона примечание (только мое мнение, не стесняйтесь downvote из - за этого;)): Я также нашел сообщество Python быть заполнены тоннами эго (не то, что большинство общин не являются , это просто немного более распространенным в таких сообществах, как C и Python). Таким образом, объединение эго с неверно истолкованными интерпретациями «питонности» приведет к большому количеству необоснованного негатива. Возьми то, что ты читаешь у других, с долей соли. Придерживайтесь официальных стандартов и документации, и все будет в порядке.
источник
Pythonic должен идиоматически кодировать на Python. Это означает использование структур и форматирования, которые хорошо работают для Python как с точки зрения программирования, так и с точки зрения чтения сообщества. Это очень похоже на то, как K & R давно устанавливает стандарт стиля программирования на C. Это руководство показывает, что вы должны идиоматически кодировать на Python. PEP 8 упоминается в этом руководстве, поэтому, вероятно, его стоит прочитать.
источник
Написание "Pythonic" кода IMHO просто эффективно использует возможности (V) HLL, которые предоставляет язык. В качестве повсеместного примера
Это очень Pythonic. Я помню, когда я начал изучать C # после нескольких месяцев только Python,
как-то меня смутило, но мне потребовалась минута, чтобы вернуться к корням C / C ++.
Другой способ Pythonic использует лямбды.
будет на самом деле печатать
l
отсортировано в порядке убывания.Тогда есть очень часто используемая, но очень менее понятная «печать утки» - если она ходит и говорит как утка, вы относитесь к ней как к утке. Это слабо связано с интерфейсами в других языках OO.
Также использование методов функционального программирования, где это применимо, таких как использование карты и редукции, считается питоническим.
Я видел ответ, когда я печатал, и он содержит приятную ссылку. PS: Дело не в том, что ваши знания Python ограничены. Могу поспорить, что Python не был вашим родным языком, и, следовательно, (как и большинство из нас, pythonistas), вам придется учиться, чтобы получить «идиоматические» со змеей! Ура!
источник
map
,reduce
,lambda
и такие идиоматических сами по себе. Понимания списков и выражения-генераторы являются альтернативой, и многие предпочитают их, когда это разумно возможно (в частности, они менее шумны, когда вам все равно понадобится лямбда). Они, безусловно, имеют свое применение, и функциональное программирование проявляется в других идиомах (например, в декораторе).(x, y) = (7, 'fuhrer')
- тем не менее, я почти всегда «исправляю», что без паренов это лучший способ написать это!print(sorted(l, reverse=True))
, что дополнительно явно говорит читателю, что происходит. Я бы посчитал ваш первый пример спорным. Это два задания, сжатые в одно; все хорошо, но я бы не назвал это очень пифоническим. Читатели должны смотреть дольше на то, что они делают, по сравнению с двумя заданиями.Питонический код:
источник
Каждый раз, когда я пытался выучить новый язык, я обнаружил, что чтение кода людьми, которые знают язык, как тыльная сторона ладони, ищет / спрашивает обо всем, что выглядит странно, а затем пытается имитировать их стиль. лучшее, что нужно сделать. Примеры:
В Python, поскольку мы обсуждаем эту тему, я нашел примеры из Dive Into Python невероятно полезными для начала работы. Они, как правило, учат не только основам Python, но и действительно подчеркивают идиоматический Python.
Когда я изучал D, так как документация в то время была не очень хороша, потому что язык был таким передовым, я узнал, читая код в стандартной библиотеке, в частности, некоторые из шедевров Андрея Александреску .
При изучении C ++ я унаследовал кодовую базу от довольно хорошего программиста C ++ и многое узнал о идиоматическом программировании на C ++ благодаря его настойчивости в передаче контейнеров STL по ссылке и т. Д.
На всех языках я нахожу, что просмотр вопросов StackOverflow о языке и поиск того, что обычно делают люди для выполнения основных задач, помогает.
источник
Python не Java, может дать вам несколько полезных советов. Не могу сказать больше, не зная, с какими проблемами вы сталкиваетесь, но это очень конкретный совет для программистов, пришедших с другого языка (в данном случае, в частности, Java), о том, как по-другому делать Python.
источник
Кто-то сказал перефразировать, чтобы узнать, что такое Pythonic, просто выбить какой-нибудь код. Я не согласен с этим. Если вам нравится писать очень плотный код, это не делает его более Pythonic.
Один из способов помочь вам определить, что такое Pythonic, в том, что касается вас, спросите себя: «Почему я (имея в виду вас) использовал язык Python?» Что вам в этом нравится?
Для меня это удобочитаемость и отсутствие компиляции и открытого исходного кода (почти все). Я могу загружать тонны библиотек и читать их исходный код с меньшим напряжением в отношении лицензирования, чем во многих других языках.
Для меня Python красив визуально. Гвидо (создатель Python) также продолжает доказывать мне своими ответами в PEPS и дискуссиях), что его выбор того, как он создал язык, превосходит мои собственные представления о том, как он должен был быть создан.
Для меня великий программист - это человек, обладающий очень осознанными навыками принятия решений о том, как действовать при программировании. Для меня Python помогает быстро сделать этот выбор.
Упрощая синтаксис исходного кода, разрешая вводить утку вместо приведения явного типа, и ожидание того, что кодеры, проверяющие ваш код «должны быть кодерами хорошего поведения», приводит к чему-то, что я тоже называю «Pythonic»
Так что есть две стороны того, что является Pythonic. Один синтаксический, другой - практика. Как объяснить более глубокую сторону того, что является "Pythonic" ..?
В Python это не составляет большого труда сделать это: alist = ['one', 'two', 'three \ n'] alist.append ((1234, 'Atuple'))
и кортеж будет добавлен в список, не заботясь о типах объектов. Pythonic не в том, что вы МОЖЕТЕ сделать это, а в том, что ваш код должен ОЖИДАТЬ этого и просто работать / адаптироваться.
Все, что работает с объектом -alist-, должно быть написано с мыслью о том, что какой-то другой кодер может войти и добавить в список нестандартную строку и что адаптация исходного кода новым кодером не должна быть трудной для выполнения. В этом и есть преимущество дактипа.
источник
Купите рекомендованную книгу. Прочитайте это. Это должно дать вам хорошую основу для использования языка и механизма, который должен соответствовать стилю сообщества
источник