Я собирался спросить, существует ли анализатор кода в стиле 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?
По умолчанию оно не включено (перенесено в расширение и отключено в этом PR). И я бы сказал, что обычно это изменение не то, что вам нужно: walrus удобен в основном в ветвях elif (чтобы избежать вложенности и обширных вычислений) или while (когда он используется как for, но для чего-то, что не является итерируемым).
Для тех, кто использует VTC: этот вопрос вообще не основан на мнениях. Он задает очень самостоятельный вопрос о поведении pylint (а именно - почему линтер не проваливает проверку правил для данного кода), на который можно ответить, основываясь на фактах и истории кода.
@STerliakov: Это изменение касалось расширенных присваиваний (например, +=), а не выражений присваивания. Как бы мне это не нравилось, consider-using-assignment-expr включено по умолчанию в расширении codestyle, если вы включаете само расширение.
consider-using-augmented-assignment по умолчанию отключен, даже если вы включите расширение. Как ни странно, похоже, что это не имеет ничего общего с тем фактом, что замена a = a+b на a += b может изменить смысл строки. Никто не упомянул об этом факте ни в одной из дискуссий, связанных с изменением.
@user2357112 user2357112 ах, извини, спасибо. Мне не удалось проверить код в заголовке проблемы по результатам поиска. Он по-прежнему является членом плагина CodeStyle, но был там с самого начала (как упоминалось в PR, на который ссылается ОП).






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