python中lambda的用法
1. Lambda 表達式有何用處如何使用
簡單來說,編程中提到的 lambda 表達式,通常是在需要一個函數,但是又不想費神去命名一個函數的場合下使用,也就是指匿名函數。這一用法跟所謂 λ 演算(題目說明裡的維基鏈接)的關系,有點像原子彈和質能方程的關系,差別其實還是挺大的。
不談形式化的 λ 演算,只說有實際用途的匿名函數。先舉一個普通的 python 例子:將一個 list 里的每個元素都平方:
map( lambda x: x*x, [y for y in range(10)] )
這個寫法要好過
def sq(x):
return x * x
map(sq, [y for y in range(10)])
,因為後者多定義了一個(污染環境的)函數,尤其如果這個函數只會使用一次的話。而且第一種寫法實際上更易讀,因
為那個映射到列表上的函數具體是要做什麼,非常一目瞭然。如果你仔細觀察自己的代碼,會發現這種場景其實很常見:你在某處就真的只需要一個能做一件事情的
函數而已,連它叫什麼名字都無關緊要。Lambda 表達式就可以用來做這件事。
進一步講,匿名函數本質上就是一個函數,它所抽象出來的東西是一組運算。這是什麼意思呢?類比
a = [1, 2, 3]
和
f = lambda x : x + 1
,你會發現,等號右邊的東西完全可以脫離等號左邊的東西而存在,等號左邊的名字只是右邊之實體的標識符。如果你能習慣 [1, 2, 3] 單獨存在,那麼 lambda x : x + 1 也能單獨存在其實也就不難理解了,它的意義就是給「某個數加一」這一運算本身。
現在回頭來看 map() 函數,它可以將一個函數映射到一個可枚舉類型上面。沿用上面給出的 a 和 f,可以寫:
map(f, a)
也就是將函數 f 依次套用在 a 的每一個元素上面,獲得結果 [2, 3, 4]。現在用 lambda 表達式來替換 f,就變成:
map( lambda x : x + 1, [1, 2, 3] )
會不會覺得現在很一目瞭然了?尤其是類比
a = [1, 2, 3]
r = []
for each in a:
r.append(each+1)
這樣的寫法時,你會發現自己如果能將「遍歷列表,給遇到的每個元素都做某種運算」的過程從一個循環里抽象出來成為一個函數 map,然後用 lambda 表達式將這種運算作
為參數傳給 map 的話,考慮事情的思維層級會高出一些來,需要顧及的細節也少了一點。Python 之中,類似能用到 lambda
表達式的「高級」函數還有 rece、filter 等等,很多語言也都有這樣的工具(不過這些特性最好不要在 Python 中用太多,原因詳見 的評論部分)。這種能夠接受一個函數作為參數的函數叫做「高階函數」(higher-order function),是來自函數式編程(functional programming)的思想。
和
其他很多語言相比,Python 的 lambda 限制多多,最嚴重的當屬它只能由一條表達式組成。這個限制主要是為了防止濫用,因為當人們發覺
lambda 很方便,就比較容易濫用,可是用多了會讓程序看起來不那麼清晰,畢竟每個人對於抽象層級的忍耐 / 理解程度都有所不同。
2. Python 匿名函數lambda是什麼
在Python語言中除了def語句用來定義函數之外,還可以使用匿名函數lambda,它是Python一種生成函數對象的表達式形式。匿名函數通常是創建了可以被調用的函數,它返回了函數,而並沒有將這個函數命名。lambda有時被叫做匿名函數也就是這個原因,需要一個函數,又不想動腦筋去想名字,這就是匿名函數。
#-*-coding:utf-8-*-
#__author__="www.iplaypy.com"
#普通python函數
deffunc(a,b,c):
returna+b+c
printfunc(1,2,3)
#返回值為6
#lambda匿名函數
f=lambdaa,b,c:a+b+c
printf(1,2,3)
#返回結果為6
#注意觀察上面的Python示例代碼,f=lambdaa,b,c:a+b+c中的關鍵字lambda表示匿名函數,
#冒號:之前的a,b,c表示它們是這個函數的參數。
#匿名函數不需要return來返回值,表達式本身結果就是返回值。
3. python的lambda函數是什麼
lambda就是匿名函數,就是沒有名字的函數,來自於於函數式編程的概念。
函數如下:
def f(x):
return x+1
print f(4)
用lambda的話,寫成這樣:
g = lambda x : x+1
print g(4)
簡介
Python由荷蘭數學和計算機科學研究學會的Guido van Rossum 於1990 年代初設計,作為一門叫做ABC語言的替代品。Python提供了高效的高級數據結構,還能簡單有效地面向對象編程。
Python語法和動態類型,以及解釋型語言的本質,使它成為多數平台上寫腳本和快速開發應用的編程語言,隨著版本的不斷更新和語言新功能的添加,逐漸被用於獨立的、大型項目的開發。
4. python lambda函數用法
這里lambda x的x是函數的參數,是lst的元素(這里是一個元組),
x[1]是函數的返回值,是lst元素(元組)的第2個元素即字元串,
所以,lst.sort(key=lambda x:x[1])是以lst元素(元組)的第二個元素為key排序,默認為升序
排序後的lst為[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
print(lst[3][1][2])是列印排序後的lst中的第4個元素(元組)的第2個元素(字元串)的第3個字元,結果就是列印字元串two的字元o
5. Lambda表達式的Python表達式
Lambda表達式是Python中一類特殊的定義函數的形式,使用它可以定義一個匿名函數。與其它語言不同,Python的Lambda表達式的函數體只能有唯一的一條語句,也就是返回值表達式語句。其語法如下:
lambda 形參列表 : 函數返回值表達式語句
下面是個Lambda表達式的例子: #!/usr/bin/envpythonli=[{age:20,name:def},{age:25,name:abc},{age:10,name:ghi}]li=sorted(li,key=lambdax:x[age])print(li)如果不用Lambda表達式,而要寫成常規的函數,那麼需要這么寫: #!/usr/bin/envpythondefcomp(x):returnx[age]li=[{age:20,name:def},{age:25,name:abc},{age:10,name:ghi}]li=sorted(li,key=comp)print(li)
6. Python 中的「lambda」是什麼意思有什麼作用如何使用
lambda就是匿名函數,就是沒有名字的函數,來自於於函數式編程的概念; java7也是加這個,
舉個例子
函數如下:
def f(x):
return x+1
print f(4)
用lambda的話,寫成這樣:
g = lambda x : x+1
print g(4)
7. Python中的lambda到底怎麼用
defcalc(s):
"""
deff_add(a,b):returna+b
deff_mul(a,b):returna*b
deff_sub(a,b):returna-b
"""
ifs=='+':
returnlambdaa,b:a+b
#returnf_add
elifs=='*':
returnlambdaa,b:a*b
#returnf_mul
elifs=='-':
returnlambdaa,b:a-b
#returnf_sub
else:
assertFalse,"error:operatornotdefined"
定義匿名函數,簡潔,便於實現函數式編程功能
sort,map里都可以用到
8. python3 lambda表達式函數
lambda你可以理解為一個函數生成器,他返回的是一個函數,比如你代碼中的lambda x:x%n意思就是返回一個函數,這個函數的作用是算X%n的值.所以返回的return bk之後,bk成了一個函數這個函數接收一個參數X
我也剛學到這卡了,網上找的這個理解起來比較舒服一點
下面是自己總結的,運行也能成功。答案也是對的。。
_not_divisible(n)返回值是一個函數,這個函數接收一個(X)參數
_not_divisible(n)(X)
9. Python中的匿名函數——lambda函數
在Python中,lambda函數是一個簡單的匿名函數。該函數沒有函數名,它可以有多個參數,但函數只由一個表達式構成。
lambda函數具體的格式如下:
lambda 參數 : 表達式
其中, lambda 是關鍵字, 參數 是函數的參數,可以有0至多個。冒號後面是表達式,也是該函數中的唯一的表達式,lambda函數會返回該表達式的返回值。
我們來看一個具體的例子。
在上述代碼中,number1, number2是lambda函數的參數,number1**2+number**2是函數的表達式,該函數返回number1, number2兩個數的平方和。
上述代碼創建了一個lambda函數後將其賦值給變數sum_square, 在print函數中通過sum_square來調用這個lambda函數。
上述的lambda函數完全可用標準的函數來實現,我們可以將上述代碼改寫成下面的代碼。
在代碼中,定義了函數sum_square,該函數包含兩個參數,並執行一條語句並將該語句的執行結果作為函數返回值。通過上述代碼可以幫助我們更直觀地理解lambda函數。
lambda函數的可讀性較差,那麼為什麼要有這樣奇怪的匿名函數呢?這個要從lambda的使用場合說起。我們來看下面的代碼。
上述代碼定義了一個數值列表,調用python的內置函數filter來生成一個新的迭代器。 filter函數的第一個參數為一個函數,用於決定過濾的方法;第二個參數為一個可迭代的對象如列表、集合等。filter函數返回一個新的迭代器, 用於獲得滿足第一個函數為真的所有元素。在上述代碼中,我們給filter傳遞的第一個參數是一個匿名函數:lambda number:number%3==0, 該函數在一個數整除3時為True,否則為False. filter函數會創建一個新的迭代器,通過調用上述匿名函數來判斷該元素是否滿足條件,得到所有3的倍數的數。
當然,上述代碼也可以使用正常的函數方式來實現,如下所示:
我們可以看到,所有匿名函數的功能都可以通過標准函數來實現。匿名函數常在調用其它函數(如filter, map等)時作為參數使用。使用匿名函數可以使代碼更為精簡。匿名函數主要用於完成簡單的任務,如果匿名函數過於復雜,會導致可讀性較差,調試起來也比較困難,因此,強烈不建議使用lambda寫天書般的代碼。總之,要根據實際情況決定是否使用匿名函數。
10. Python 中的「lambda」是什麼意思有什麼作用如何使用
lambda就是匿名函數,就是沒有名字的函數,簡便實用,來自於於函數式編程的概念(這個不懂自己谷歌);連java7好像都加這個...x0dx0ax0dx0a舉個例子x0dx0a一般的函數是這樣:x0dx0ax0dx0adeff(x):x0dx0areturnx+1x0dx0ax0dx0a這樣使用printf(4)x0dx0ax0dx0a用lambda的話,寫成這樣:x0dx0ag=lambdax:x+1x0dx0a這樣使用printg(4)