我阅读了文档和大量示例,但不完全理解如何使用它。
我有一个函数,
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
但是它们都不起作用。
这都是关于评估顺序的。
对于这样的表达:
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