Улучшение читабельности Python? - PullRequest
4 голосов
/ 09 сентября 2008

В последнее время я действительно наслаждаюсь программированием на Python. Я родом из-за сильной любви к кодированию на C, где все, пожалуй, сложнее, чем должно быть (но, по крайней мере, волосы на груди). Поэтому переключение с C на Python для более сложных вещей, не требующих тонны скорости, было скорее благом, чем проклятием при написании проектов.

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

Например, следующий блок текста трудно расшифровать, если я не смотрю на него (что мне не нравится делать):

if foo:
   bar = baz
   while bar not biz:
      bar = i_am_going_to_find_you_biz_i_swear_on_my_life()

did_i_not_warn_you_biz()
my_father_is_avenged()

Проблема возникает в конце блока if: все вкладки, а затем внезапное возвращение к сотрясающемуся блоку кажется почти беспокоящим. В качестве решения я начал кодировать свой Python так:

if foo:
   bar = baz
   while bar not biz:
      bar = i_am_going_to_find_you_biz_i_swear_on_my_life()
   #-- while --
#-- if --

did_i_not_warn_you_biz()
my_father_is_avenged()

И это по какой-то странной причине делает меня более способным читать свой собственный код. Но мне любопытно: кто-нибудь еще с моей странной проблемой нашел более простые способы сделать их код с вкладками более читабельным? Я хотел бы узнать, есть ли лучший способ сделать это, прежде чем это станет для меня огромной привычкой.

Ответы [ 7 ]

23 голосов
/ 09 сентября 2008

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

15 голосов
/ 09 сентября 2008

Мне нравится помещать пустые строки вокруг блоков, чтобы сделать поток управления более очевидным. Например:

if foo:
   bar = baz

   while bar not biz:
      bar = i_am_going_to_find_you_biz_i_swear_on_my_life()

did_i_not_warn_you_biz()
my_father_is_avenged()
8 голосов
/ 09 сентября 2008

Вы можете попробовать увеличить размер отступа, но в целом я бы просто сказал: расслабьтесь, это придет со временем. Я не думаю, что попытка сделать Python похожим на C - очень хорошая идея.

7 голосов
/ 09 сентября 2008

Вместо того, чтобы сосредоточиться на том, чтобы сделать ваши существующие структуры более читабельными, вы должны сосредоточиться на создании более логичных структур. Делайте блоки меньшего размера, старайтесь не слишком громко вкладывать блоки, выполняйте меньшие функции и старайтесь больше продумывать поток кода.

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

3 голосов
/ 09 сентября 2008

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

0 голосов
/ 16 июня 2010
from __future__ import braces

Должен ли я сказать больше? :)

Серьезно, PEP 8 , 'Пустые строки', §4 - официальный способ сделать это.

0 голосов
/ 09 сентября 2008

Я хотел бы узнать больше о синтаксисе Python. Часто, если фрагмент кода выглядит странно, обычно есть лучший способ написать его. Например, в приведенном выше примере:

bar = foo if baz else None
while bar not biz:
    bar = i_am_going_to_find_you_biz_i_swear_on_my_life()

did_i_not_warn_you_biz()
my_father_is_avenged()

Хотя это небольшое изменение, оно может улучшить читаемость. Кроме того, если честно, я никогда не использовал цикл while, так что есть хорошее изменение, которое вы бы в итоге получили с хорошим кратким пониманием списка или вместо цикла for. ;)

...