您可以舉一個例子和其他例子來說明何時何時不使用Lambda? 我的書給了我例子,但他們很混亂。「lambda」在Python中意味着什麼?以及使用它的最簡單方法是什麼?
回答
LAMBDA,它源於Lambda Calculus和(據我所知)最早是在Lisp實施,基本上是一個匿名函數 - 不具有名稱的功能,以及在線使用,換句話說,你可以指定一個標識符lambda函數在一個表達式爲這樣:
>>> addTwo = lambda x: x+2
>>> addTwo(2)
4
此分配addTwo
匿名功能,它接受1參數x,並且在函數體它增加了2至x,它返回的最後一個值函數體中的最後一個表達式,因此沒有return
關鍵字。除非你不使用一個函數定義,你將標識符分配給拉姆達
>>> def addTwo(x):
... return x+2
...
>>> addTwo(2)
4
:
上面的代碼是大致相當於。
使用它們的最好的地方是當你不想用名字定義函數時,可能是因爲該函數只能用於一個時間而不是多次,在這種情況下你會更好關閉一個函數定義。
使用哈希樹的例子lambda表達式:
>>> mapTree = {
... 'number': lambda x: x**x,
... 'string': lambda x: x[1:]
... }
>>> otype = 'number'
>>> mapTree[otype](2)
4
>>> otype = 'string'
>>> mapTree[otype]('foo')
'oo'
在這個例子中,我真的不希望定義一個名字要麼這些功能,因爲我只哈希中使用過的,所以我會使用lambda表達式。
只是一個很小的小挑逗,否則很好的答案:lambda不是原始的Lisp,而是來自lambda微積分。 – phoebus 2009-10-18 01:01:21
啊是的,我的使用起源錯誤 - 我做了一些編輯。還有什麼我應該添加/修改? – 2009-10-18 01:05:11
+1精彩的回答,考慮在字典例子中改變'type'的名字..因爲它是一個內建的... – 2009-10-18 05:37:15
我不知道你正在使用哪本書,但Dive into Python has a section,我認爲這是信息。
2017年,萬維網上的任何地方都沒有diveintopython.org網站! – Rexford 2017-06-25 18:57:28
使用lambda是一種風格的事情。當你可以使用一個非常簡單的函數,並且通常將它存儲在某個地方(可能在函數列表中,或者在GUI工具包數據結構等中)時,人們會覺得lambda減少了代碼中的混亂。
在Python中,只能創建一個返回單個表達式的lambda表達式,並且lambda表達式不能跨越多行(除非通過使用反斜槓結束行來連接多行)招)。人們已經要求Python爲lambda添加改進,但並未發生。據我瞭解,使lambda能夠編寫任何函數的變化會使Python中的解析代碼顯着複雜化。而且,由於我們已經有了def
來定義一個函數,所以增益並不值得複雜化。所以有些情況下你可能希望在不可能的地方使用lambda。在這種情況下,你可以使用一個def
:
object1.register_callback_function(lambda x: x.foo() > 3)
def fn(x):
if x.foo() > 3:
x.recalibrate()
return x.value() > 9
elif x.bar() > 3:
x.do_something_else()
return x.other_value < 0
else:
x.whatever()
return True
object2.register_callback_function(fn)
del(fn)
第一個回調函數是簡單和拉姆達足夠了。對於第二個,它根本不可能使用lambda。我們通過使用def
並創建一個與名稱fn
綁定的函數對象,然後將fn
傳遞到register_callback_function()
來實現相同的效果。然後,爲了顯示我們可以,我們將名稱fn
上的del()
解除綁定。現在名稱fn
不再與任何對象綁定,但register_callback_function()
仍然具有對函數對象的引用,因此函數對象位於其上。
- 1. void *意味着什麼以及如何使用它?
- 2. Progress ABL - 什麼是「?」在方法參數中意味着什麼?
- 3. 〜=是什麼。在Stata意味着什麼?
- 4. StackOverflowError在Java中意味着什麼?它的修復是什麼?
- 5. %是什麼〜DP0意味着
- 6. 這是&意味着什麼?
- 7. 「**」在Python中意味着什麼?
- 8. 會話在Python中意味着什麼?
- 9. **在python中意味着什麼
- 10. 符號序列「#$」在Ruby中意味着什麼以及在哪裏使用它?
- 11. 這個錯誤意味着什麼以及如何解決它?
- 12. 這個錯誤意味着什麼以及如何解決它?
- 13. 這意味着什麼以及它如何提供幫助?
- 14. 什麼是..和*意味着方面j
- 15. 烘焙方法意味着什麼?
- 16. 什麼「&」用C意味着++,當涉及一個方法聲明
- 17. MySQL中的「無符號」意味着什麼以及何時使用它?
- 18. 是什麼意思:=在Go中意味着什麼?
- 19. 是什麼Pascal語法意味着
- 20. 什麼%*%意味着R中
- 21. 什麼呢##意味着在$ {}
- 22. 什麼===在PHP意味着
- 23. 什麼。意味着在PHP?
- 24. 這是什麼!在這方面意味着什麼?
- 25. 這在perl $ variable_one {$ variable_two}中意味着什麼?它叫什麼?
- 26. $是什麼?是否意味着在Ruby?
- 27. 是什麼;是否意味着在Ruby?
- 28. 是什麼?在Android的XML意味着
- 29. printStackTrace()在簡單易懂的短語中意味着什麼?
- 30. 這個簡單的命令在PHP中意味着什麼?
http://docs.python.org/tutorial/controlflow.html#lambda-forms的哪一部分令人困惑或不完整?哪本書令人困惑?它的哪些部分令人困惑? – 2009-10-18 01:19:39