Що означає пітонічна? [зачинено]


88

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

Що означає пітонічний у цьому контексті? Наприклад, чому так

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

не пітонічний поки

for x in list:
   doSomething(x)

є пітонічним?



Це поза темою питання. Ви могли б надати невеликий зразок коду, щоб зробити його докладніше по темі.
ρ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
До речі, вихідний код для "імпорту цього" знаходиться тут: github.com/python/cpython/blob/master/Lib/this.py
Гаутам

Що може бути прикладом в іншій галузі? Як готування їжі, проектування, водіння ..?
Даніель Спрінгер

2
Для прикладу деякого більш складного коду, "непітонічна" реалізація шифру Відженера стає поступово більш "пітонічною" у цій відповіді (розкриття: мій код та думки): stackoverflow.com/questions/2490334/…
Нік

18
Думаю, мені слід залишити тут коментар, давши своє ім’я користувача
Pythonic,

Також, можливо, варто зазначити, що загальний термін "ідіоматичний"
Луї Меддокс,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.