2017-01-30 121 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

'高清˚F (x):如果x%2 == 0则返回“Even”,否则“Odd”'也是1-liner,更具可读性。我没有看到这个特定lambda的合理用例。 –

+0

同意上面的注释,一般不使用lambda,除非你需要匿名函数(例如作为排序的关键) –

回答

1

Lambda返回一个函数,所以你得到函数的地址。

试试这个:

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

在这里,您执行lambda函数,而不是只返回函数本身。

您可以lambda函数赋值给一个变量是这样的:

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

然后调用该函数与相关参数:

func(2) 
+0

非常有用。谢谢。为什么我需要追加参数而不是将其集成到lambda表达式中? –

+0

考虑x作为传递给lambda的参数,谁是那个x?你需要使用该参数调用lambda,在这种情况下它是2。 –

0

拉姆达回报功能

试试这个

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

希望它有帮助!

2

你根本不应该使用lambda。只要做到

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

return ('Even', 'Odd')[number % 2]