Python中如何实现类似Java Optional.map的可空值条件转换?
Python中类似Java Optional.map的可空值处理方案
在Java中,我们可以用Optional.map对可空值进行条件转换,示例代码如下:
Optional<Integer> multiplyByTwo(Optional<Integer> i) { return i.map(x -> x * 2); }
那Python里有没有符合Python风格的实现方式?
下面这种写法是可行的:
def multiply_by_two(i: int | None): return None if i is None else i * 2
但遇到复杂场景时,这种写法就不够优雅了,比如下面这个例子:
def get_object_for_dict(d: dict): return SomeType(i=None if d.get('i') is None else d['i'].to_decimal())
虽然可以通过创建中间变量优化可读性,但我们更希望避免额外的中间变量:
def get_object_for_dict(d: dict): i = d.get('i') return SomeType(i=None if i is None else i.to_decimal())
理想情况下,我们可以用这几种方式实现:
方式一:自定义map_or_none函数
def get_object_for_dict(d: dict): return SomeType(i=map_or_none(d.get('i'), lambda x: x.to_decimal()))
方式二:自定义支持空安全调用的Noneable类型
通过重写__getattribute__方法,让这个类型在值为None时,所有属性/方法调用都返回None:
def get_object_for_dict(d: dict): return SomeType(i=Noneable(d.get('i')).to_decimal())
方式三:使用支持空安全的字典类型
def get_object_for_dict(d: NoneableDict): return SomeType(i=d.get('i').to_decimal())
内容的提问来源于stack exchange,提问作者John K
相关产品推荐
相关产品推荐

