Для тех, кто хочет перенаправить stdout и stderr навсегда в файлы, используйте grep для stderr, но оставляйте stdout для записи сообщений в tty:
# save tty-stdout to fd 3
exec 3>&1
# switch stdout and stderr, grep (-v) stderr for nasty messages and append to files
exec 2> >(grep -v "nasty_msg" >> std.err) >> std.out
# goes to the std.out
echo "my first message" >&1
# goes to the std.err
echo "a error message" >&2
# goes nowhere
echo "this nasty_msg won't appear anywhere" >&2
# goes to the tty
echo "a message on the terminal" >&3
И если вам действительно не нужна функция, вы можете заменить ее даже без лямбда. :)
(number % 2 != 0)
само по себе является выражением, которое принимает значение True или False. Или, что еще проще,
bool(number % 2)
, который можно упростить следующим образом:
if number % 2:
print "Odd!"
else:
print "Even!"
Но читабельно это или нет, вероятно, в глазах смотрящего.
Другие уже давали вам ответы, которые касаются вашего конкретного случая. В общем, однако, когда вам действительно требуется оператор if
, вы можете использовать условное выражение. Например, если вам нужно вернуть строки «False»
и «True»
, а не логические значения, вы можете сделать это:
lambda num: "False" if num%2==0 else "True"
Определение этого выражения в справочнике на языке Python выглядит следующим образом:
Выражение
x if C else y
сначала вычисляетC
(неx
); еслиC
истинно, вычисляетсяx
и возвращается его значение; в противном случае вычисляетсяy
и возвращается его значение.
И также не забывайте, что вы можете эмулировать сложные условные предложения с помощью простой логики короткого замыкания, используя то, что "and" и "или" возвращают некоторые из своих элементов (последний вычисленный) ... например, в этом случае предположим, что вы хотите вернуть что-то отличное от True или False
lambda x: x%2 and "Odd" or "Even"
Каждый раз, когда вы видите, что пишете:
if (some condition):
return True
else:
return False
, вы должны заменить его одной строкой:
return (some condition)
Тогда ваша функция станет:
def isodd(number):
return number % 2 != 0
Вы должны увидеть, как получить из там к решению лямбда, которое предоставили другие.