Условное присвоение Python, где «условие» использует составные операторы и встроенную переменную? [дубликат]

Используя такие языки, как java, c и csharp, вы можете выполнять условное присваивание с помощью встроенной переменной, чтобы избежать ненужных вызовов функций в процессе.

В качестве примера ниже, если Tree.find() находит элемент, оператор извлечет только текстовую часть элемента, в противном случае - null.

      strvar = (element = Tree.find(".//xpath/str")) ? element.text : null

Вопрос: почему это не работает в Python и есть ли альтернативный лайнер?

      strvar = None if not (element = Tree.find(".//xpath/str")) else element.text

РЕДАКТИРОВАТЬ / ОТВЕТИТЬ

  1. Очень простой ответ, который вам нужен - это использовать недавно добавленный оператор Walrus (), который позволяет сравнивать во время присваивания. Оператор Walrus был представлен в версии 8.3. Окончательное решение - использовать вместо =

  1. Обратите внимание, что оцениваемое направление имеет значение, когда речь идет о приведении типов и условном присвоении с использованием :=

хорошо

      strvar = None if not (element := Tree.find(".//xpath/str")) else element.text

б) Предупреждение о неявном приведении типов

      strvar = element.text if (element := Tree.find(".//xpath/str")) else element else None

Warning: <input>:1: FutureWarning: The behavior of this method will change in future versions. Use specific 'len(elem)' or 'elem is not None' test instead.

В этом случае вам нужно проверить присвоение с помощью «не нет», то есть:

      strvar = element.text if (element := Tree.find(".//xpath/str")) is not None else None

0 ответов

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