如何在Python的if/elif块中复用变量以避免重复计算?
避免重复调用与不必要执行的条件判断优化
先看这段存在重复调用问题的代码:
if re.search(r"b.", "foobar"): return re.search(r"b.", "foobar").group(0)
这里re.search被执行了两次,属于明显的冗余操作。我们可以通过提前赋值变量的方式避免重复调用:
match = re.search(r"b.", "foobar") if match: return match.group(0)
但这种写法会让re.search始终被执行,哪怕后续逻辑不需要用到它的结果。比如在包含elif的场景中:
match = re.search(r"b.", "foobar") if somecondition: return "lorem ipsum" elif match: return match.group(0)
如果somecondition为真,re.search的执行完全是多余的;可如果somecondition为假,最初的重复调用写法又会执行两次re.search。要是这类条件判断操作本身耗时,就得根据somecondition的触发概率权衡写法,灵活性很差。
那有没有办法既能复用条件判断的结果,又能避免不必要的执行或重复调用?
解决方案:使用海象运算符(Python 3.8+)
Python 3.8引入的**海象运算符:=**完美解决了这个问题,它允许在条件判断中直接完成赋值并复用变量,既不会提前执行耗时操作,也不会重复调用:
if somecondition: return "lorem ipsum" elif (match := re.search(r"b.", "foobar")): return match.group(0)
针对单一if的场景,写法如下:
if (match := re.search(r"b.", "foobar")): return match.group(0)
这种写法下,re.search只会在进入对应分支时才执行,结果直接赋值给match变量供后续使用,彻底规避了之前两种写法的弊端。
内容的提问来源于stack exchange,提问作者PixelMaster
相关产品推荐
相关产品推荐

