Python相当于Perl的习惯做这个或那个,通常被称为“或死”?

时间:2011-09-26 09:11:19

标签: python perl boolean idioms short-circuiting

在Perl中,做function() || alternative()之类的事情很常见。如果第一个返回false,它将运行第二个。

如何在Python中轻松实现?

更新

示例(伪代码):

x = func() or raise exeption
x = func() or print(x)
func() or print something

如果可能的解决方案应该适用于Python 2.5 +

注意:有一个隐含的假设是你不能修改func()来引发异常,也不能编写包装器。

4 个答案:

答案 0 :(得分:5)

使用or:Python使用short circuit evaluation作为布尔表达式:

function() or alternative()

如果function返回True,则确定此表达式的最终值 alternative根本没有评估。

答案 1 :(得分:2)

您可以使用or

function() or alternative()

此外,还有PEP 308中定义的条件表达式:

x = 5 if condition() else 0

这在表达式中有时很有用,而且更具可读性。

答案 2 :(得分:1)

function() or alternative()

机制完全相同。

答案 3 :(得分:1)

尝试使用or

>>> def bye():
  return 3

>>> print bye() or 342432
3

不幸的是,这在Perl中不起作用,因为在Perl中,在my $c = $d || 45;之类的作业之后,如果$c未定义,则$d中的值为45。在Python中,您会收到错误NameError: name 'd' is not defined