2017-01-30 6 views
0

Я чувствую эту проблему похож на This oneLambda возвращает адрес памяти

return(lambda x: "Even" if number % 2 == 0 else "Odd") 

Из Кур я мог бы решить эту проблему так:

if number % 2 == 0: 
    return("Even") 
else: 
    return("Odd") 

Но я хотел бы иметь аккуратный Однострочник для этого. Теперь я застрял, мой код возвращает

at 0x7fb0378fb0d0> 

Что мне не хватает?

+5

вне темы, но я бы не назвал это «в чистом виде», вы больно собственное содержание (и небольшой производительности) никакой реальной пользы – Sayse

+2

'Защиту е (x): return «Even», если x% 2 == 0 else «Odd» 'также является 1-лайнером, который намного читабельнее. Я не вижу правдоподобного прецедента для этой конкретной лямбды. –

+0

Согласны с комментариями выше, как правило, не используют лямбда, если вам не нужна анонимная функция (например, как ключ для сортировки) –

ответ

1

Lambda возвращает функцию, поэтому вы получаете адрес функции.

Попробуйте это:

return ((lambda x: "Even" if x % 2 == 0 else "Odd")(2)) 

Здесь вы выполняете функцию лямбда вместо того, чтобы просто вернуть саму функцию.

Вы можете назначить функцию лямбда переменной следующим образом:

func = lambda x: "Even" if x % 2 == 0 else "Odd" 

А затем вызвать функцию с соответствующим параметром:

func(2) 
+0

Очень полезно. Благодарю. Почему мне нужно добавить аргумент вместо того, чтобы интегрировать его в инструкцию лямбда? –

+0

Рассмотрим x как параметр, переданный лямбда, кто такой x? вам нужно вызвать лямбда с этим параметром, в этом случае это 2. –

0

лямбда-функция возвращает

Попробуйте это

f = lambda (x :"Even" if x % 2 == 0 else "Odd") 
print f(2) 

Надеюсь, это поможет!

2

Вы не должны использовать лямбда вообще. Просто сделайте

return 'Even' if number % 2 == 0 else 'Odd' 

или

return ('Even', 'Odd')[number % 2] 
Смежные вопросы