如何用Python海象运算符实现screen()非None时更新变量,避免重复调用?
正确实现方法
你需要确保每次都调用一次screen(),同时仅当返回值不为None时更新img,用海象运算符的正确写法如下:
img = s if (s := screen()) is not None else img
为什么你的写法不生效?
第一种写法错误:
img = (s := self.screen(bounding_box)) if s is not None else img
Python条件表达式的执行顺序是先判断条件,再执行分支。这里s在条件判断时还未被赋值((s := ...)仅在条件为True时才会执行),不仅可能触发未定义变量的错误,还会导致当需要保留img时,screen()根本没有被调用,违背了你的需求。第二种写法错误:
(img := self.screen(bounding_box)) if img is not None else img
这里的条件判断的是原有img是否不为None,而不是新调用screen()的返回值。当screen()返回None时,只要原有img不为None,就会执行img := None,直接把img覆盖为None,完全不符合你的预期。
正确写法的逻辑
- 先执行
(s := screen()):调用一次screen()并将返回值赋值给s - 判断
s is not None:如果返回值有效 - 则将
img更新为s;否则保持img原有值
这样既保证了每次只调用一次screen(),又实现了“返回None时保留原值”的需求,完全匹配你原始代码的逻辑,且可以在循环中重复使用,避免冗余代码。
内容的提问来源于stack exchange,提问作者AskedSuperior
相关产品推荐
相关产品推荐

