Выравнивание заданий (стиль) на 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 много лет спустя
Не выравнивать. Рано или поздно будет появляться новая переменная, которая будет длиннее, и вам понадобится время от времени нажимать пробел, пока все не будет выглядеть снова. Не стоит.
Ответы
Ответ 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!
В итоге вы сделаете больше работы для себя, чтобы все было согласовано.