2016-07-22 45 views
3

我最近开始学习Python 3.5.1,目前正在试验lambda表达式。我尝试设置下面的简单方法。为什么将这个lambda表达式结果返回一个字符串?

def sum_double(a, b): 
    return lambda a, b: a+b if a != b else (a+b)*2, a, b 

所有它应该做的是返回ab总和,两次,如果a他们的总和等于b,而是我得到一个输出看起来像这样。

代码:

print(sum_double(1, 2)) 
print(sum_double(2, 3)) 
print(sum_double(2, 2)) 

输出:

(<function sum_double.<locals>.<lambda> at 0x000001532DC0FA60>, 1, 2) 
(<function sum_double.<locals>.<lambda> at 0x000001532DC0FA60>, 2, 3) 
(<function sum_double.<locals>.<lambda> at 0x000001532DC0FA60>, 2, 2) 

我这样做不对吗?为什么会发生这种情况,如果甚至有可能,我将如何使用lambda表达式来实现所需的功能?

+0

你为什么要使用Lambda在这里? lambda是一个函数,所以你从函数返回一个函数。 –

+1

@MorganThrapp它[功能一路下降](https://en.wikipedia.org/wiki/Turtles_all_the_way_down)! –

+0

@MorganThrapp看看我能做什么,不能做什么,以便完全理解他们和他们的行为。 – pianoisland

回答

2

那么,你不是在调用lambda函数,因此返回值是定义的lambda函数的元组,以及ab的值。

更改它来调用拉姆达同时提供的参数在返回前:

return (lambda a, b: a+b if a != b else (a+b)*2)(a, b) 

而且它工作得很好:

print(sum_double(1, 2)) 
3 

print(sum_double(2, 2)) 
8 
+1

谢谢,这工作!时间限制到期后,我会接受你的回答。 – pianoisland

+1

供将来参考:这不是**应该如何使用lambda表达式。在这个特定的情况下,你正在将你的功能封装在两个冗余的函数调用中。要么完全省略lambda,要么直接将lambda函数分配给变量'sum_double'。 – mhoff

+1

@MichaelHoff完全同意。我从来没有反对使用,因为OP表明他正在试验lambda,而在试验中,你通常可以自由地尝试任何古怪的事情。 –

2
sum_double = lambda a, b: a+b if a != b else (a+b)*2 

lambda本身定义了一个函数。 A def不是必需的。

在你的情况下,打印一个由返回函数ab组成的元组。

相关问题