Удобочитаемость Python подсказывает для программиста Java

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

Я знаю, что каждый язык имеет свои собственные конвенции и набор "привычек". Так, с точки зрения удобочитаемости, что такое конвенции и методы, который является "способом пойти" в Java, но не действительно "pythonic путь", чтобы сделать материал?

9
задан Samuel Carrijo 20 May 2010 в 00:13
поделиться

6 ответов

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

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

8
ответ дан 4 December 2019 в 12:16
поделиться

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

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

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

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

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)

BTW, а также отступление, которое не является специфическим для Python - одна из моих любимых мозолей (на любом языке, но в Python Tufte's Spirit меня поддерживает; -):

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

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

if something:
  blih()
  bluh()
  blah()
else:
  this()
  that()
  theother()
5
ответ дан 4 December 2019 в 12:16
поделиться

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

3
ответ дан 4 December 2019 в 12:16
поделиться

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

0
ответ дан 4 December 2019 в 12:16
поделиться

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

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

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

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

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

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

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

0
ответ дан 4 December 2019 в 12:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: