Пылинт не предлагает оператора-моржа. Почему?

Я собирался спросить, существует ли анализатор кода в стиле pylint, способный предложить использование оператора := в тех местах, где это может улучшить код. Однако похоже, что такой тест был добавлен в pylint два года назад -> github PR (объединён).

В любом случае, я никогда не видел такого предложения, даже для этого примера, как в связанном PR:

x = 2
if x:
    print(x)

# -----
# if (x := 2):
#    print(x)
# -----

Эта функция доступна начиная с Python 3.8. (Я использую последние версии Python и pylint.) Хотя мне нужно как-то его включить, но в справке говорится:

--py-version <py_version> Минимальная версия Python, используемая для проверок, зависящих от версии. Воля по умолчанию используется версия, используемая для запуска pylint.

Что не так? Почему нет consider-using-assignment-expr от pylint?

Вы этого не найдете, потому что это не улучшит код. Ваш первый пример — лучшее программирование. Оператор морж был добавлен поздно, поскольку он вызывает споры.

Tim Roberts 15.09.2023 21:13

По умолчанию оно не включено (перенесено в расширение и отключено в этом PR). И я бы сказал, что обычно это изменение не то, что вам нужно: walrus удобен в основном в ветвях elif (чтобы избежать вложенности и обширных вычислений) или while (когда он используется как for, но для чего-то, что не является итерируемым).

STerliakov 15.09.2023 23:51

Для тех, кто использует VTC: этот вопрос вообще не основан на мнениях. Он задает очень самостоятельный вопрос о поведении pylint (а именно - почему линтер не проваливает проверку правил для данного кода), на который можно ответить, основываясь на фактах и ​​истории кода.

STerliakov 15.09.2023 23:52

@STerliakov: Это изменение касалось расширенных присваиваний (например, +=), а не выражений присваивания. Как бы мне это не нравилось, consider-using-assignment-expr включено по умолчанию в расширении codestyle, если вы включаете само расширение.

user2357112 16.09.2023 00:39
consider-using-augmented-assignment по умолчанию отключен, даже если вы включите расширение. Как ни странно, похоже, что это не имеет ничего общего с тем фактом, что замена a = a+b на a += b может изменить смысл строки. Никто не упомянул об этом факте ни в одной из дискуссий, связанных с изменением.
user2357112 16.09.2023 00:40

@user2357112 user2357112 ах, извини, спасибо. Мне не удалось проверить код в заголовке проблемы по результатам поиска. Он по-прежнему является членом плагина CodeStyle, но был там с самого начала (как упоминалось в PR, на который ссылается ОП).

STerliakov 16.09.2023 00:44
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
6
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проверку consider-using-assignment-exprpylint можно включить, добавив следующую строку в файл конфигурации pylint. Я использую файл конфигурации с именем pylint.toml:

[tool.pylint.main]
load-plugins = "pylint.extensions.code_style"

Затем вы можете запустить линтер с помощью pylint --rcfile <config_file> <python_file>.

Дополнительные инструкции смотрите здесь. Обратите внимание, что я использую Python 3.11 и Pylint 2.17, но проверка должна быть доступна начиная с Python 3.8.

Другие вопросы по теме