2011-12-15 32 views
1

我該如何在python中定義一個常量lambda函數?python中的常量lambda函數

我就需要評估這樣的表達式

lam (array[1,2,3,4,5]) 

現在我用

lam = lambda t: 1 + t*0 

它的工作原理,但它是太浪費?

+2

你想要的 「常數lambda函數」 是什麼呢?目標是返回一個所有元素都設置爲相同值的數組嗎?問題中的代碼對我無效。 – 2011-12-15 22:36:40

+0

這裏混亂的根源:你的`lam()`因爲你似乎認爲的原因不是「工作」的。整個數組是通過`t`而不是單個元素傳遞的,並且由於標量和數組之間的操作符'+'重載,所以您得到的是1的數組,與常量lamda函數無關。 – wim 2011-12-15 23:47:12

回答

5

,如果你只是想有一個返回同樣的事情功能,無論它被稱爲什麼參數,這是一個行!你沒有任何義務使用你的任何論點。

在蟒蛇,lambda是沒有名字

如果你打算採取lambda表達式,並立即返回值賦值給一個變量,你給一個函數的函數(和其他一些無關的限制)一個名字。不要這樣做,只需定義一個常規功能即可。當需要將函數傳遞給另一個函數時,您應該使用lambda表達式,並且您要使用的函數很少,甚至不需要名稱(例如總是返回1)。 Python有一些這樣的「高階函數」(以其他函數作爲參數的函數),mapfilterreduce位於內置命名空間中。

#never! 
always_return_one = lambda ignored_argument: 1 

#OK: functions with names are def'ed not lambda'd 
def always_return_one(ignored_argument): 
    return 1 

#Also OK: pass the lambda to another function as soon as you spell it. 
modified_list = some_highorder_function(lambda ignored: 1, [1, 2, 3, 4, 5]) 

python中最常用的高階函數有一些特殊的語法。在上述情況下,如果函數map,你可以用一個列表理解像這樣:

modified_list = [1 for ignored in [1, 2, 3, 4, 5]] 

其內容更容易一些,是一貫更快

2

如果你想在lambda函數忽略其參數,並始終返回1,根本就沒有使用參數:

lam = lambda t: 1 
1

如何只:

[1] * len(array) 
3

這是傳統的使用_未使用參數

lam = lambda _: 1