Я все еще привыкаю к соглашениям Python и использую его, pylint
чтобы сделать свой код более питоническим, но меня озадачивает тот факт, что pylint не любит односимвольные имена переменных. У меня есть несколько таких петель:
for x in x_values:
my_list.append(x)
и когда я бегу pylint
, я получаю Invalid name "x" for type variable (should match [a-z_][a-z0-9_]{2,30}
- это говорит о том, что допустимое имя переменной должно быть длиной от 3 до 31 символа, но я просмотрел соглашения об именах PEP8 и не вижу ничего явного относительно одиночных строчных букв , и я действительно вижу много примеров, в которых они используются.
Что-то мне не хватает в PEP8, или это уникальный стандарт для pylint?
источник
_
для хранения временных значений является антипаттерном. Переменные подчеркивания указывают на нерелевантные / отброшенные значения, а не на временное присвоение, напримерi
илиx
. Кроме того, в интерпретаторе есть особое значение для хранения последнего значения последнего выражения.Немного подробнее о том, что заметил Алекс Герни: вы можете указать PyLint, чтобы он делал исключения для имен переменных, которые (вы ругаетесь) совершенно ясны, даже если меньше трех символов. Найдите или добавьте в свой файл pylintrc под
[FORMAT]
заголовком:Здесь pk (для первичного ключа), x и y - добавленные мной имена переменных.
источник
pylint 1.8.3
. pylint.pycqa.org/en/1.8/user_guide/options.htmlreturn [customer_address for customer_address in thing.get_customer_addresses() if customer_address.is_proper()]
противreturn [a for a in thing.get_customer_addresses() if a.is_proper()]
Я утверждаю, что последнее более понятно, поскольку это очевидно из контекста. В общем, переменная длина должна соответствовать области действия переменной.В строго типизированных языках переменные имени из одной буквы могут быть нормальными, потому что вы обычно получаете тип рядом с именем в объявлении переменной или в прототипе функции / метода:
В Python вы не получите эту информацию, поэтому, если вы напишете:
вы не оставляете команде обслуживания абсолютно никаких подсказок относительно того, что может делать функция, как она вызывается и что возвращает. Итак, в Python вы склонны использовать описательные имена:
и вы даже добавляете строку документации, объясняющую, что делает этот материал и какие типы ожидаются.
источник
with open(FILE) as f: items = f.readlines()
например, где переменнаяf
действительно очевидна, но получаю предупреждения pylint. Это заставило меня перейти на flake8.f
полностью отличается отOptionList
вызываемой c. Особенно когда я не могу его переименовать,function
потому что он затеняет встроенный.В настоящее время также есть возможность переопределить регулярное выражение. Т.е. если вы хотите разрешить одиночные символы в качестве переменных:
Таким образом,
pylint
будет соответствовать PEP8 и не принесет дополнительных нарушений. Также вы можете добавить его в.pylintrc
.источник
> 1.8.3
это похоже на ответ. Может это в вашем ,.pylintrc
а также для постоянной конфигурации:variable-rgx=[a-z0-9_]{1,30}$
.Глубинная причина в том , что вы , возможно , помните , что вы хотели
a
,b
,c
,x
,y
, иz
иметь в виду , когда вы писали код, но когда другие читают его, или даже когда вы вернетесь в свой код, код становится гораздо более удобным для чтения , когда вы даете это семантическое имя. Мы не пишем что-то один раз на доске, а потом стираем. Мы пишем код, который может просуществовать десять или более лет и быть прочитанным много-много раз.Используйте семантические имена. Семантические имена , которые я использовал, были , как
ratio
,denominator
,obj_generator
,path
и т.д. Это может занять дополнительное второе или два типа их, но время вы сэкономить , пытаясь выяснить , что вы написали , даже полчаса с тех пор так и стоит .источник