Руководство по кодированию для словарей Python - PullRequest
3 голосов
/ 13 февраля 2012

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

initialstate =  {
                    'state':grid,
                    'f':find_manhattan_distance(grid,goal),
                    'g':0,
                    'h':find_manhattan_distance(grid,goal),
                    'ancestor': None
                }

Ответы [ 4 ]

9 голосов
/ 13 февраля 2012

pep8.py говорит:

mydict.py:2:28: E231 missing whitespace after ':'
mydict.py:1:15: E222 multiple spaces after operator

Попробуйте это:

initialstate = {
    'state': grid,
    'f': find_manhatten_distance(grid, goal),
    'g': 0,
    'h': find_manhatten_distance(grid, goal),
    'ancestor': None
}

Обратите внимание на изменение расстояния после запятых и операторов. Эта версия проходит все тесты pep8.py.

4 голосов
/ 13 февраля 2012

Люди расходятся во мнениях о том, как лучше отформатировать подобные вещи.Я предпочитаю:

initialstate =  {
    'state': grid,
    'f': find_manhattan_distance(grid, goal),
    'g': 0,
    'h': find_manhattan_distance(grid, goal),
    'ancestor': None,
    }

Вещи, которые мне нравятся в этом стиле:

  1. Позволяет легко использовать несколько вложений.Отступ под открытой скобкой вместо этого вызовет слишком много отступов после двух уровней.
  2. Запятая после последнего элемента означает, что я могу добавить еще одну строку без изменения текущей последней.
  3. закрывающая скобка с отступом следует за другим визуальным стилем Python, где нет очевидной завершающей строки, просто отступ, указывающий конец блока.)
2 голосов
/ 13 февраля 2012

Вы можете выбрать один из следующих вариантов (и некоторых других):

initialstate = {
    'state': grid,
    'f': find_manhatten_distance(grid,goal),
    'g': 0,
    'h': find_manhatten_distance(grid,goal),
    'ancestor': None,
    }
  • Pro : дружественный к управлению версиями: строки (включая первую) можно удалять или вставлять, не затрагивая более 1 строки (кстати, это применимо только в том случае, если вы добавляете ведущую ,)
  • Pro : много горизонтального пространства для предметов
  • Con: Может быть, это не сразу очевидно, что диктат назначен на initialstate

initialstate = { 'state': grid,
                 'f': find_manhatten_distance(grid,goal),
                 'g': 0,
                 'h': find_manhatten_distance(grid,goal),
                 'ancestor': None, }
  • Pro : очень компактный, максимально использует доступное горизонтальное пространство
  • Pro : Сохраняет обычную семантику переменной left, value right, таким образом, делая абсолютно ясным, что назначено где
  • Con : Если имя переменной очень длинное, вам может не хватить места
  • Con : Не очень удобен для управления версиями: добавление или удаление строк или даже изменение имени переменной вызовет diff
1 голос
/ 13 февраля 2012

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

initialstate = dict(state    = grid,
                    f        = find_manhattan_distance(grid, goal),
                    g        = 0,
                    h        = find_manhattan_distance(grid, goal),
                    ancestor = None)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...