Python中是否存在类似Perl//的非None判定条件运算符?
Python 中类似 Perl
// 运算符的实现方案 有的,在Python 3.8及以上版本,可以借助海象运算符(:=)来实现你要的功能——既严格区分None和其他假值(比如False、0、""等),又能保证a和b这类计算成本高的表达式只被执行一次:
# 假设 expensive_a() 和 expensive_b() 是计算成本高的表达式 result = (a := expensive_a()) if a is not None else expensive_b()
这个写法的逻辑是:
- 先执行
expensive_a(),把结果赋值给a - 判断
a是否为None:如果不是,直接返回a;如果是,执行expensive_b()并返回其结果
如果你需要更简洁的复用写法,也可以封装成一个简单函数(同样保证操作数只计算一次):
def null_coalesce(a_func, b_func): a = a_func() return a if a is not None else b_func() # 使用时传入表达式的lambda包装 result = null_coalesce(lambda: expensive_a(), lambda: expensive_b())
这样就完全匹配需求:仅当第一个操作数为None时才计算第二个操作数,且两个操作数都只执行一次,同时严格区分None和其他假值。
内容的提问来源于stack exchange,提问作者Zbynek Vyskovsky - kvr000
相关产品推荐
相关产品推荐

