Python与Perl';成语做这个或那个,通常称为;还是死;?

Python与Perl';成语做这个或那个,通常称为;还是死;?,python,perl,boolean,idioms,short-circuiting,Python,Perl,Boolean,Idioms,Short Circuiting,在Perl中,像function()| | alternative()这样的操作非常常见。如果第一个返回false,它将运行第二个 如何在Python中轻松实现这一点 更新 示例(伪代码): 如果可能,解决方案应该与Python 2.5配合使用+ 注意:有一个隐含的假设,即您不能修改func()来引发异常,也不能编写包装器 function() or alternative() 机制完全相同。您可以使用或: function() or alternative() >>> d

在Perl中,像
function()| | alternative()
这样的操作非常常见。如果第一个返回false,它将运行第二个

如何在Python中轻松实现这一点

更新

示例(伪代码):

如果可能,解决方案应该与Python 2.5配合使用+

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

function() or alternative()

机制完全相同。

您可以使用

function() or alternative()
>>> def bye():
  return 3

>>> print bye() or 342432
3
此外,还有在中定义的条件表达式:


它有时在表达式中很有用,并且可读性更好。

使用
:Python用于布尔表达式:

function() or alternative()
如果
function
returs True,则此表达式的最终值将被确定并
备选方案根本不进行评估。

尝试

function() or alternative()
>>> def bye():
  return 3

>>> print bye() or 342432
3

不幸的是,这不像在Perl中那样工作,因为在Perl中,在像
my$c=$d | | 45
如果
$d
未定义,则在
$c
中有值45。在Python中,您会遇到一个错误
NameError:name'd'未定义

是否可以执行类似
result=function()或print(result)
的操作?您可以在Python 3.X中执行此操作。在Python2.X中,“print”不是一个函数,而是一个语句。因此,如果function()返回一个计算结果为False的值,则结果将被打印,而print返回None时,“result”的值将为“None”@rocksportrocker考虑到对
perl
,我怀疑需要的是类似
(result=function())或(print(result))
我认为Python不允许这种属性。@JamesKanze:是的,这在Python中不起作用,因为赋值操作不返回值,就像在Perl或C/C++@rocksportrocker中一样,或者更精确地说:赋值在Python中不是运算符。Python语句中出现
=
意味着它是赋值语句,但
=
左边的不是表达式,表达式不能包含
=
。80%的时间这是一个糟糕的想法。在perl中,这几乎总是取决于函数中隐含或隐藏的副作用。同样,Python等价物仅在异常被忽略或静默时才起作用。请提供您希望使用此代码的Python代码。它可能隐藏了更严重的异常处理问题。我们通常使用异常来处理意外情况。