Python相当于getOrElse

时间:2018-03-06 13:04:30

标签: python

在包含可选类型的语言中,您有一个名为orElsegetOrElse的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 两次。如果将其替换为复杂表达式,那么这是一个特殊问题。 (功能风格相当正常。)

2 个答案:

答案 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