如果方法确实返回 None,则海象运算符分配变量

问题描述 投票:0回答:1

我阅读了文档和大量示例,但不完全理解如何使用它。

我有一个函数,

screen()
,它返回屏幕截图,但可能不返回 None。我在变量的循环中调用它。第一次调用它永远不会返回 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

但是它们都不起作用。

python python-assignment-expression
1个回答
-1
投票

这都是关于评估顺序的。

对于这样的表达:

x = v1 if condition else v2

Python 需要在评估

condition
v1
之前评估
v2
,并且不应同时评估两者。

因此,如果您想在

v1
condition
中使用相同的值,则需要在
condition
中使用海象运算符,因为它首先被评估:

img = s if (s := self.screen(bounding_box)) is not None else img
© www.soinside.com 2019 - 2024. All rights reserved.