Советы по читаемости Python для программиста на Java - PullRequest
9 голосов
/ 20 мая 2010

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

Я знаю, что у каждого языка есть свои соглашения и набор «привычек». Итак, с точки зрения читабельности, что такое соглашения и практики, которые являются «путем» в Java, но на самом деле не являются «питоническим способом» делать вещи?

Ответы [ 6 ]

8 голосов
/ 20 мая 2010

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

Взгляните на Код, как на Pythonista: Idiomatic Python , Руководство по стилю для кода Python и Python для программистов на Java (в архиве) .

5 голосов
/ 20 мая 2010

Джейкоб Холлен однажды заметил, что лучший стиль Python следует за Tufte отказом от украшения (хотя поле Tufte - не языки программирования, а визуальное отображение информации): не тратьте «чернила» (пиксели) ) или "бумага" (пространство) для простого украшения.

Из этого принципа вытекает многое: без лишних скобок, без точек с запятой, без глупых «блоков ascii» в комментариях и строках документов, без лишних пробелов для «выравнивания» вещей в разных строках, одинарных кавычек, если только вам не нужны двойные кавычки, нет \ продолжать строки, кроме случаев, когда это обязательно, без комментариев, которые просто напоминают читателю о правилах языка (если он все равно не знает язык, на котором у вас проблемы ;-) и т. д.

Я должен отметить, что некоторые из этих последствий "духа Python Tufte" более противоречивы, чем другие, в сообществе Python. Но язык, безусловно, уважает «Дух Туфте» довольно хорошо ...

Переход к «более спорным» (но санкционирована дзен Python - import this в качестве переводчика строки): «плоский лучше, чем вложенный», так что «выйти, как только разумный», а не гнездятся. Позвольте мне объяснить:

if foo:
  return bar
else:
  baz = fie(fum)
  return baz + blab

это не страшно, но и не оптимально: так как «return» «вылезает», вы можете сохранить вложение:

if foo:
  return bar
baz = fie(fum)
return baz + blab

Более точный пример:

for item in container:
  if interesting(item):
    dothis(item)
    dothat(item)
    theother(item)

что большой блок с двойным вложением не является аккуратным ... рассмотрим более плоский стиль:

for item in container:
  if not interesting(item):
    continue
  dothis(item)
  dothat(item)
  theother(item)

Кстати, и, кроме того, это не совсем Python-эксклюзивный стиль - одна из моих любимых мозолей (на любом языке, но в Python Tufte's Spirit меня поддерживает; -):

if not something:
  this()
  that()
  theother()
else:
  blih()
  bluh()
  blah()

"если нет ... иначе" искажено ! Поменяйте местами две половинки и потеряйте not:

if something:
  blih()
  bluh()
  blah()
else:
  this()
  that()
  theother()
3 голосов
/ 20 мая 2010

Лучшее место для начала, вероятно, PEP-8 , которое является официальным руководством по стилю Python. Он охватывает много основ того, что считается стандартом.

0 голосов
/ 20 мая 2010

Синтаксис - это только верхушка айсберга. Существует ряд различных языковых конструкций, о которых должны знать Java-программисты, например, Python не нужно использовать интерфейс

Создание интерфейса и заменяемых реализаций в Python - Переполнение стека

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

if not my_array:
  return
...process my_array...

Первое условие эквивалентно Java

if ((my_array == null) || (my_array.length == 0)) {
  return
}

Это находка в Python. Это не только более кратко, но и позволяет избежать ловушки Java, когда многие люди не проверяют оба условия последовательно. В результате предотвращается бесчисленное множество исключений NullPointerException.

0 голосов
/ 20 мая 2010

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

...