Почему pylint возражает против имен односимвольных переменных?
Я все еще привыкаю к соглашениям python и использую pylint
чтобы сделать мой код более подходящие для Python, но я озадачен тем, что 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?
5 ответов:
PyLint проверяет не только рекомендации PEP8. Он также имеет свои собственные рекомендации, одна из которых заключается в том, что имя переменной должно быть описательным и не слишком коротким.
вы можете использовать это, чтобы избежать таких коротких имен:
my_list.extend(x_values)
или настройки PyLint по конфигурация чтобы сказать PyLint, какое имя переменной хорошо.
немного подробнее о том, что отметил Гурни Алекс: вы можете сказать PyLint, чтобы сделать исключения для имена переменных которые (вы мизинец ругаться) совершенно ясно, хотя менее трех символов. Найти или добавить в свой pylintrc, под :
# Good variable names which should always be accepted, separated by a comma good-names=i,j,k,ex,Run,_,pk,x,y
здесь pk (для первичного ключа), x и y-имена переменных, которые я добавил.
более глубокая причина заключается в том, что вы можете вспомнить, что вы хотели
a
,b
,c
,x
,y
иz
чтобы иметь в виду, когда вы написали свой код, но когда другие читают его, или даже когда вы возвращаетесь к своему коду, код становится гораздо более читаемым, когда вы даете ему семантическое имя. Мы не будем писать что-то на доске, а потом стирать. Мы пишем код, который может оставаться в течение десятилетия или более, и читаться много, много раз.использовать семантические имена. Семантические имена, которые я использовал, были похожи
ratio
,denominator
,obj_generator
,path
и т. д. Это может занять дополнительную секунду или две, чтобы напечатать их, но время, которое вы сэкономите, пытаясь выяснить, что вы написали даже через полчаса, того стоит.
в строго типизированных языках переменные имени 1 буквы могут быть ok-ish, потому что вы обычно получаете тип рядом с именем в объявлении переменной или в прототипе функции / метода:
bool check_modality(string a, Mode b, OptionList c) { ModalityChecker v = build_checker(a, b); return v.check_option(c); }
в Python, вы не получите эту информацию, так что если вы пишите:
def check_modality(a, b, c): v = build_checker(a, b) return v.check_option(c)
вы не оставляете абсолютно никакой подсказки для команды обслуживания относительно того, что функция может делать, и как она называется, и что она возвращает. Таким образом, в Python вы, как правило, используете описательные имена:
def check_modality(name, mode, option_list): checker = build_checker(name, mode) return checker.check_option(option_list)
и вы даже добавляете строку документа, объясняющую, что делает материал и какие типы ожидаются.
В настоящее время существует также возможность переопределить выражение. Т. е. если вы хотите разрешить одиночные символы в качестве переменных:
pylint --variable-rgx="[a-z0-9_]{1,30}$" <filename>
и
pylint
будет соответствовать PEP8 и не принесет дополнительных нарушений сверху. Также вы можете добавить его в.pylintrc
.