Python-эквивалент языка Perl делает то или иное, обычно известное как «или умри»? - PullRequest
6 голосов
/ 26 сентября 2011

В Perl довольно часто делают такие вещи, как function() || alternative(). Если первый вернет false, будет запущен второй.

Как это можно легко реализовать в Python?

Обновление

Примеры (псевдокод):

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

Если возможно, решения должны работать с Python 2.5 +

Примечание. Подразумевается, что вы не можете изменять func () для создания исключений или написания оболочек.

Ответы [ 4 ]

5 голосов
/ 26 сентября 2011

Использовать or: Python использует оценку короткого замыкания для логических выражений:

function() or alternative()

Если function возвращает значение True, определяется окончательное значение этого выражения и alternative не оценивается вообще.

2 голосов
/ 26 сентября 2011

вы можете использовать or:

function() or alternative()

также есть условное выражение, определенное в PEP 308 :

x = 5 if condition() else 0

Что иногда полезно в выражениях и немного более читабельно.

1 голос
/ 26 сентября 2011

попробуйте с or:

>>> def bye():
  return 3

>>> print bye() or 342432
3

К сожалению, это не работает, как в Perl, потому что в Perl после такого присваивания, как my $c = $d || 45;, у вас есть $c значение 45, если $d не определено.В Python вы получаете ошибку NameError: name 'd' is not defined

1 голос
/ 26 сентября 2011
function() or alternative()

Механизм точно такой же.

...