Условное присвоение 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
РЕДАКТИРОВАТЬ / ОТВЕТИТЬ
- Очень простой ответ, который вам нужен - это использовать недавно добавленный оператор Walrus (), который позволяет сравнивать во время присваивания. Оператор Walrus был представлен в версии 8.3. Окончательное решение - использовать вместо
=
- Обратите внимание, что оцениваемое направление имеет значение, когда речь идет о приведении типов и условном присвоении с использованием
:=
хорошо
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