等效于getOrElse的Python

Moh*_*han 1 python

在具有可选类型的语言中,您可以使用一个称为orElse或的fn来getOrElse执行此操作:

None.getOrElse(1) == 1
Some(2).getOrElse(1) == 2
Run Code Online (Sandbox Code Playgroud)

即您可以指定一个默认值。在Python中,我发现自己正在编写:

if output_directory:
    path = output_directory
else:
    path = '.'
Run Code Online (Sandbox Code Playgroud)

getOrElse通话会更干净。搜索orElse和getOrElse会出现逻辑运算符。有合适的Python fn吗?

编辑:getOrElse与三元运算符调用不同,因为这需要您output_directory 两次引用。如果将其替换为复杂的表达式,这将是一个特殊的问题。(在功能样式上非常正常。)

Chr*_*nds 5

or用于等效逻辑:

path = output_directory or '.'
Run Code Online (Sandbox Code Playgroud)


小智 5

请注意,getOrElsebool(x) == False. 例如

Some(0).getOrElse(1) == 0
Some('').getOrElse('A') == ''
Run Code Online (Sandbox Code Playgroud)

但对于以下两个定义中的任何一个

def getOrElse1(x, y):
  return x or y

def getOrElse2(x, y):
  return x if x else y
Run Code Online (Sandbox Code Playgroud)

我们有

getOrElse(x=0, 1) == 1
getOrElse(x='', 'A') == 'A'
Run Code Online (Sandbox Code Playgroud)

定义给出了等效的语义:

getOrElse(x=0, 1) == 1
getOrElse(x='', 'A') == 'A'
Run Code Online (Sandbox Code Playgroud)