Что значит питонический? [закрыто]

88

На многих веб-сайтах я часто вижу комментарии о том, что код не является питоническим или что существует более питонический способ достижения той же цели.

Что в этом контексте означает питонический? Например, почему

while i < someValue:
   do_something(list[i])
   i += 1

не питонический пока

for x in list:
   doSomething(x)

такое питонический?

Джон
источник
11
Дзен Python , что такое Pythonic и т. Д.
Мартин Турной
Это вопрос не по теме. Вы могли бы предоставить небольшой образец кода, чтобы сделать его более предметным.
ρss

Ответы:

103

Использование возможностей языка Python для создания ясного, лаконичного и поддерживаемого кода.

Pythonic означает код, который не только правильно понимает синтаксис, но и следует соглашениям сообщества Python и использует язык так, как он предназначен для использования.

Это, возможно, проще всего объяснить отрицательным примером, как в связанной статье из других ответов. Примеры непифонного кода часто исходят от пользователей других языков, которые вместо изучения шаблонов программирования Python, таких как понимание списков или выражения генератора, пытаются ломать шаблоны, более часто используемые в C или java. Циклы - особенно распространенные примеры этого.

Например, в Java я мог бы использовать

for i in (i; i < items.length ; i++)
 {
  n = items[i];
 ... now do something
 }

В Python мы можем попытаться воспроизвести это с помощью циклов while, но было бы чище использовать

for i in items:
  i.perform_action()

Или даже выражение генератора

(i.some_attribute for i in items)

Поэтому, по сути, когда кто-то говорит, что что-то не является питоническим, они говорят, что код можно переписать таким образом, чтобы он лучше подходил для стиля кодирования питонов.

Ввод import thisв командной строке дает краткое изложение принципов Python. Менее известно то, что исходный код для import thisявно и по замыслу не является питонным! Взгляните на это как пример того, чего не следует делать.

Джеймс
источник
26
Кстати, исходный код для «import this» находится здесь: github.com/python/cpython/blob/master/Lib/this.py
Gautam
Какой был бы пример в другой области? Любите готовить, проектировать, водить ...?
Дэниел Спрингер,
2
В качестве примера более сложного кода "непифоническая" реализация шифра Виженера постепенно становится более "питонической" в этом ответе (раскрытие: мой код и мнения): stackoverflow.com/questions/2490334/…
Ник,
18
Думаю, мне стоит оставить здесь комментарий, учитывая мое имя пользователя
Pythonic
Также, возможно, стоит отметить, что общий термин - «идиоматический»
Луи Мэддокс