在包含可选类型的语言中,您有一个名为orElse
或getOrElse
的fn,可以执行此操作:
None.getOrElse(1) == 1
Some(2).getOrElse(1) == 2
即。您可以指定默认值。在Python中,我发现我在写:
if output_directory:
path = output_directory
else:
path = '.'
通过getOrElse
电话会更干净。搜索orElse和getOrElse会调出逻辑运算符。有没有合适的Python fn?
编辑:getOrElse与三元运算符调用不同,因为这需要您引用output_directory
两次。如果将其替换为复杂表达式,那么这是一个特殊问题。 (功能风格相当正常。)
答案 0 :(得分:5)
只需使用or
作为等效逻辑:
path = output_directory or '.'
答案 1 :(得分:1)
请注意,在getOrElse
处于极端情况下,上述解决方案不能完全像Scala或Haskell这样的FP语言的规范bool(x) == False
一样工作。例如
Some(0).getOrElse(1) == 0
Some('').getOrElse('A') == ''
但是对于下面的两个定义
def getOrElse1(x, y):
return x or y
def getOrElse2(x, y):
return x if x else y
我们有
getOrElse(x=0, 1) == 1
getOrElse(x='', 'A') == 'A'
定义给出了等效的语义:
def getOrElse(x, y):
return x if x is not None else y