Соглашение о квадратных скобках Python

Как вы думаете, какое соглашение чаще всего используется при написании словарных литералов в коде?

Я напишу одно возможное соглашение в качестве ответа.


person Community    schedule 16.09.2009    source источник
comment
опросы должны быть вики сообщества   -  person SilentGhost    schedule 16.09.2009


Ответы (5)


Я бы сказал, что стандарта почти нет.

Я видел два способа отступа:

Indent 1:
my_dictionary = {
    'uno': 'something',
    'number two': 'some other thing',
}

Indent 2:
my_dictionary = {'uno': 'something',
                 'number two': 'some other thing',
                 }

Я видел три места, где была концевая скобка:

End 1:
my_dictionary = {'uno': 'something',
                 'number two': 'some other thing',
}

End 2:
my_dictionary = {'uno': 'something',
                 'number two': 'some other thing',
                 }

End 3:
my_dictionary = {'uno': 'something',
                 'number two': 'some other thing',}

И иногда вы оправдываете ценности:

my_dictionary = {'uno':        'something',
                 'number two': 'some other thing',
                 }

А иногда даже двоеточие:

my_dictionary = {'uno'        : 'something',
                 'number two' : 'some other thing',
                 }

Что выглядит странно.

И иногда у вас есть запятая в конце, а иногда нет:

my_dictionary = {'uno': 'something',
                 'number two': 'some other thing'}

А иногда наклеиваешь все это в один ряд (если помещается).

my_dictionary = {'uno': 'something', 2: 'some other thing'}

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

amethodthattakesadict({'hey': 'this',
                       'looks': 'a',
                       'bit': 'shitty',
                      })

Я бы рекомендовал вам приспособиться к стилю парня, написавшего код, который вы редактируете. Если это ваш код: делайте, как хотите. :-)

person Lennart Regebro    schedule 16.09.2009
comment
+1 за красивое описание всех возможностей. - person hcs42; 16.09.2009
comment
Я думаю, что единственная часть этих примеров, на самом деле регулируемая PEP8, — это интервалы вокруг двоеточий. Ноль до, один после. - person Triptych; 16.09.2009

О концевой скобке: я предпочитаю это так:

my_dictionary = {
   'a': 'first value',
   'b': 'second',
   }

и я скажу вам, почему: поскольку отступ в коде Python не имеет близкого токена, код имеет отступ следующим образом: первая строка (if, while, def и т. д.) отступает от остальной части предложения, а все остальные строки имеют отступ. То же количество. Последняя строка предложения имеет отступ вместе со всем остальным. Следующая строка с таким же отступом, как и первая строка, является первой строкой следующего предложения, а не последней строкой этого.

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

person Ned Batchelder    schedule 16.09.2009

Стиль отступа 1, стиль окончания 3 (после ответа Леннарта):

   my_dictionary = {1: 'thing_one',
                    2: 'thing_two',
                    ...
                    n: 'thing_n'}

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

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

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

Возможно, это можно было бы назвать отступом в стиле Лиспа, потому что это способ, которым код Лиспа был отступом с столетий десятилетий, но он, например, также часто используется в коде Smalltalk. Одна вещь, которую вы часто будете слышать в дискуссиях о размещении скобок (в языках, подобных Лиспу): «Зачем давать им лишние строки? Они так важны?».

Хотя, в конце концов, это скорее вкусовщина.

person Community    schedule 21.09.2009

Я делаю это, если словарь слишком велик и не помещается в одну строку:

d = \
   {
   'a' : 'b',
   'c' : 'd'
   }
person Community    schedule 21.09.2009

person    schedule
comment
+1 за запятую в конце. - person RichieHindle; 16.09.2009
comment
Сначала я не оценил полезность завершающей запятой в списках, диктовках и т. д. Но это действительно упрощает последующее редактирование списка, будь то изменение порядка, копирование/вставка или добавление новых элементов. . - person PaulMcG; 16.09.2009
comment
Добавление одной строки представляет собой однострочное различие с запятой на месте. - person u0b34a0f6ae; 16.09.2009
comment
Любой другой формат - кощунство! Шучу :) Это, безусловно, мой фаворит. - person TM.; 21.09.2009
comment
Я бы сказал, что я предпочитаю ставить пробел перед точкой с запятой (иногда это помогает при операциях копирования и вставки), но, поскольку каждый редактор в основном форматирует его (и JSON) автоматически без пробела, я думаю, что проще принять его без пространство. - person Philippe Fanaro; 05.09.2019