Lambda功能
回答
拉姆達項代表作爲值的函數。它可以完全作爲一個值來傳遞(因爲它是一個),並通過給它一些參數來應用。命名函數只是映射到lambda項的名稱,可以是常量或變量(取決於語言的詳細信息)。
是的,它們在高級編程語言中非常普遍。例如,JavaScript中的所有函數實際上都是存儲在變量中的lambda表達式。
lambda函數是一個對象(或值)。它可以作爲參數傳遞給另一個函數,或從一個函數返回。
map(lambda x: x**2, [1,2,3,4])
它不需要名稱;當你創建一個(例如Python)lambda x: x**2
時,你有lambda函數。與傳統的比較:
def square(x):
return x**2
也許最重要的是,您可以在運行時構造它們。
def make_exp_function(n):
return lambda x: x**n
square = make_exp_function(2)
cube = make_exp_function(3)
for i in range(100):
f = make_exp_function(i)
print f(2)
我必須補充一點,這是一個非常低調的觀點。 這意味着您可以以比EVAL更高效的方式動態創建代碼。 它使得像抽象工廠這樣的編程更容易。 – MER 2013-11-21 23:44:38
它基本上語法制糖,你會在10日線與代表和你有什麼話,可以在單行lambda表達式做寫什麼。對於我來說,主要考慮的事情是與同一個項目中的多個開發人員一起工作時,您必須確保其可讀性仍然清晰。
你可以附加一個事件直列 Button1_Click += (sender, eventArgs) => { //myCode };
但你不能夠再利用的情況下,如果有大量的代碼在那裏,它不會讓你的代碼TRANSPARANT幫助。
您也可以創建一個lambda來從列表<>中檢索數據,但是當有很多參數時,可能會變得相當不清楚,其中一個很好的LINQ查詢可以更加清晰。
這主要是個人的選擇,但我必須說,我已經使用了好幾次:)
希望這有助於一點, 山姆
雖然PHP支持匿名函數,它們實際上不是關閉 - 所以你想念最有趣的部分。
在JavaScript(以及支持「lambda」的語言爲正確方式)中,您可以從函數返回一個函數,並且返回的函數即使在外部函數執行完畢後也能夠訪問封閉上下文。例如:
function counter(start){
return function() {
return start++;
};
};
var f = counter(1);
alert(f()); // now it's 1
alert(f()); // now it's 2
alert(f()); // now it's 3
var g = counter(10);
alert(g()); // now it's 10
alert(g()); // now it's 11
alert(f()); // now it's 4!
大約有拉姆達函數的兩個重要的東西(至少在方式術語常用):
它們可以通過周圍。函數可以將lambda函數作爲參數或返回lambda函數。
他們可以訪問他們定義的範圍。所以,例如,lambda函數可以訪問封閉函數的參數。
有關如何,這是有用的一個基本的例子,我會寫在Ruby filter
功能:
def filter(array, &lambda_function)
new_array = []
for item in array
new_array.push(item) if lambda_function[item]
end
return new_array
end
$people_array = #imagine I have an array of Person objects here
def find_people_richer_than(threshold)
return filter($people_array) {|person| person.wealth >= threshold}
end
我們filter
不知道我們將要使用的篩選標準是什麼。該邏輯全部包含在我們傳入的塊(Ruby的版本的lambda函數)中。但請注意,即使實際上在filter
內調用了lambda函數,它仍然知道定義它的閾值。
- 1. lambda功能解釋
- 2. 無元lambda功能
- 3. 將lambda功能HOF
- 4. 的功能實現爲lambda
- 5. lambda表達式功能
- 6. AWS API/Lambda POST功能
- 7. 無法端口LAMBDA功能恢復正常功能
- 8. Lambda功能規模硬件模擬
- 9. Kotlin:使用lambda代替功能界面?
- 10. pyspark:保持功能的lambda表達式
- 11. LAMBDA拉姆達的:功能不捕捉
- 12. 建議用戶改寫lambda的功能
- 13. 斯卡拉:lambda作爲功能
- 14. 如何保護AWS Lambda功能?
- 15. Lambda表達式和功能NHibernate
- 16. Qt的使用lambda功能時
- 17. 如何通過地圖或lambda功能
- 18. 熊貓據幀:使用lambda功能
- 19. 局部功能VS LAMBDA C#7.0
- 20. AWS API網關和LAMBDA功能
- 21. 動態功能/ lambda表達式
- 22. Lambda表達式閉合功能不能正常工作
- 23. Alexa的技能套件-Lambda功能 - 無法驗證SpeechletRequest(JAVA)
- 24. Lambda只能與功能界面一起使用嗎?
- 25. 功能模板與當地lambda表達式,但無法與其它功能
- 26. 使用lambda功能和字典顯示功能,可以用不同的方式
- 27. lambda表達式在C++給人一種功能的其他功能
- 28. 如果亞馬遜Lambda功能成功或失敗,請發送請求
- 29. 使用AWS Lambda功能訂閱Amazon SNS主題?
- 30. Python的開關功能的變體:鍵lambda函數
@Donal:感謝合併,我打算這樣做,但刷新了編輯歷史,你已經做到了。 (我們確實需要一些[技術措施](http://meta.stackexchange.com/questions/6495/preventing-conflicting-simultaneous-edits/46118#46118)來幫助。) – 2010-05-31 07:44:54
@Roger:同意。有時,當我進行長時間的編輯時,我會得到一個頂部通知,說明有些事情發生了變化,但這與兩個人同時做短小模組的時間並不相同。他們只是碰撞。 – 2010-05-31 07:49:37