2016-07-22 76 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組成的元組。

相關問題