Python与Perl';成语做这个或那个,通常称为;还是死;?
在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
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代码。它可能隐藏了更严重的异常处理问题。我们通常使用异常来处理意外情况。