Оператор Walrus присваивает переменную, если метод возвращает NonePython

Программы на Python
Anonymous
Оператор Walrus присваивает переменную, если метод возвращает None

Сообщение Anonymous »

Я прочитал документацию и множество примеров, но не до конца понимаю, как ее использовать.
У меня есть функция screen(), которая возвращает снимок экрана, но может вернуть Нет. Я вызываю это в цикле для переменной. При первом вызове он никогда не возвращает None. Если он возвращает None, я просто хочу присвоить переменной предыдущее значение. Так что я вполне могу решить эту проблему вот так,

Код: Выделить всё

img = screen()
while True:
temp = screen()
if temp is not None:
img = temp

Но я хочу сделать это в одной строке, поскольку я вызываю screen() почти 10 раз в этом цикле, чтобы результат суммировался. Заметьте, я не могу просто сделать,

Код: Выделить всё

img = screen() if screen() is not None else img
поскольку при этом метод вызывается дважды.
Я тоже не могу этого сделать,

Код: Выделить всё

img = screen() or img
поскольку screen() возвращает объект, имеющий неоднозначное значение истинности, я получаю ошибку Python.
Это не похожий вопрос Выполнить функцию по результату другой функции, если нет, так как они не полностью отвечают на этот вопрос.
Я пробовал

Код: Выделить всё

img = (s := self.screen(bounding_box)) if s is not None else img
и

Код: Выделить всё

(img := self.screen(bounding_box)) if img is not None else img
Но они оба не работают.

Подробнее здесь: https://stackoverflow.com/questions/784 ... eturn-none

Вернуться в «Python»