Подтвердить что ты не робот

Выравнивание заданий (стиль) на Python

Мне очень нравятся следующие стандарты стиля, как те, которые указаны в PEP 8. У меня есть linter, который проверяет его автоматически, и, безусловно, мой код намного лучше из-за этого.

В PEP 8 есть только одно очко, E251 и E221 не очень хороши. Исходя из фона JavaScript, я использовал выравнивание назначений переменных следующим образом:

var var1        = 1234;
    var2        = 54;
    longer_name = 'hi';

var lol = {
    'that'        : 65,
    'those'       : 87,
    'other_thing' : true
};

И по моему скромному мнению, это значительно улучшает читаемость. Проблема в том, что это не рекомендуется PEP 8. Со словарями это не так уж плохо, потому что после двоеточия разрешены пробелы:

dictionary = {
   'something':        98,
   'some_other_thing': False
}

Я могу "жить" с переменными присваиваниями без выравнивания, но то, что мне совсем не нравится, не может передавать именованные аргументы в вызове функции, например:

some_func(length=      40,
          weight=      900,
          lol=         'troll',
          useless_var= True,
          intelligence=None)

Итак, что я делаю, это использовать словарь, как показано ниже:

specs = {
    'length':       40,
    'weight':       900,
    'lol':          'troll',
    'useless_var':  True,
    'intelligence': None
}

some_func(**specs)

или просто просто

some_func(**{'length':       40,
             'weight':       900,
             'lol':          'troll',
             'useless_var':  True,
             'intelligence': None})

Но у меня такое чувство, что эта работа просто хуже, чем игнорирование PEP 8 E251/E221.

Какова наилучшая практика?

EDIT много лет спустя

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

4b9b3361

Ответ 1

Лучшая практика субъективна, но наиболее распространенной практикой является придерживаться PEP8.

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

Если вы работаете над своим собственным кодом, выровняйтесь, кому это нужно? PEP8 является ориентиром, а не законом.

Ответ 2

Итак, что я делаю, это использовать словарь, как показано ниже:

specs = {
    length:      40,
    weight:      900,
    lol:         'troll',
    useless_var: True,
    intelligence:None
}

IMHO - это менее читаемый (был ли он синтаксисом без цитирования ключей), и если мне захочется добавить some_longer_named_varible, я действительно не уверен, хочу ли я гадать, чтобы перераспределить все иначе.

Я думаю, вам нужно просто укусить пулю, которую я боюсь.

Ответ 3

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

var1        = 1234
var2        = 54
longer_name = 'hi'

:

var1        = 1234
var2        = 54
even_longer_name = 'hi'  # not aligned any more!

В итоге вы сделаете больше работы для себя, чтобы все было согласовано.