Булева оценка в лямбде

Для тех, кто хочет перенаправить 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
8
задан SilentGhost 22 July 2009 в 21:42
поделиться

8 ответов

И если вам действительно не нужна функция, вы можете заменить ее даже без лямбда. :)

(number % 2 != 0)

само по себе является выражением, которое принимает значение True или False. Или, что еще проще,

bool(number % 2)

, который можно упростить следующим образом:

if number % 2:
    print "Odd!"
else:
    print "Even!"

Но читабельно это или нет, вероятно, в глазах смотрящего.

14
ответ дан 5 December 2019 в 04:37
поделиться
lambda num: num % 2 != 0
9
ответ дан 5 December 2019 в 04:37
поделиться

Да, вы можете:

isodd = lambda x: x % 2 != 0
9
ответ дан 5 December 2019 в 04:37
поделиться
isodd = lambda number: number %2 != 0
5
ответ дан 5 December 2019 в 04:37
поделиться

Другие уже давали вам ответы, которые касаются вашего конкретного случая. В общем, однако, когда вам действительно требуется оператор if , вы можете использовать условное выражение. Например, если вам нужно вернуть строки «False» и «True» , а не логические значения, вы можете сделать это:

lambda num: "False" if num%2==0 else "True"

Определение этого выражения в справочнике на языке Python выглядит следующим образом:

Выражение x if C else y сначала вычисляет C (не x ); если C истинно, вычисляется x и возвращается его значение; в противном случае вычисляется y и возвращается его значение.

5
ответ дан 5 December 2019 в 04:37
поделиться

isodd = лямбда-число: (False, True) [number & 1]

1
ответ дан 5 December 2019 в 04:37
поделиться

И также не забывайте, что вы можете эмулировать сложные условные предложения с помощью простой логики короткого замыкания, используя то, что "and" и "или" возвращают некоторые из своих элементов (последний вычисленный) ... например, в этом случае предположим, что вы хотите вернуть что-то отличное от True или False

lambda x: x%2 and "Odd" or "Even"
3
ответ дан 5 December 2019 в 04:37
поделиться

Каждый раз, когда вы видите, что пишете:

if (some condition):
    return True
else:
    return False

, вы должны заменить его одной строкой:

return (some condition)

Тогда ваша функция станет:

def isodd(number):
    return number % 2 != 0

Вы должны увидеть, как получить из там к решению лямбда, которое предоставили другие.

1
ответ дан 5 December 2019 в 04:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: