匿名函式lamada的用法

2022-08-30 07:51:09 字數 1728 閱讀 5891

#1.函式式程式設計:

例如:乙個整數列表,要求按照列表中元素的絕對值大小公升序排列

>>> list1 = [3,5,-4,-1,0,-2,-6]

>>> sorted(list1, key=lambda x: abs(x))

[0, -1, -2, 3, -4, 5, -6]

排序函式sorted支援接收乙個函式作為引數,該引數作為 sorted的排序依據,這裡按照列表元素的絕對值進行排序。

當然,我也可以用普通函式來實現:

>>> def foo(x):

... return abs(x)

...>>> sorted(list1, key=foo)

[0, -1, -2, 3, -4, 5, -6]

只不過是這種方式**看起來不夠 pythonic 而已。

lambda:這是python支援一種有趣的語法,它允許你快速定義單行的最小函式,可以用在任何需要函式的地方:

>>> add = lambda x,y : x+y

>>> add(5,6)

11>>> (lambda x,y:x+y)(5,6)

11#2.python中最常見的filter篩選、map小刷子、reduce合併,都可以用lambda表示式來生成!

對於序列來講,有三個函式式程式設計工具: filter()、map()和reduce()。

map(function,sequence):把sequence中的值當引數逐個傳給function,返回乙個包含函式執行結果的list。如果function有兩個引數,即map(function,sequence1,sequence2)。

#求1~20的平方

>>> list(map(lambda x:x*x,range(1,21))) #python2.x使用map(lambda x:x*x,range(1,21))

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400]

filter(function,sequence):對sequence中的item依次執行function(item),將執行結果為true的item組成乙個list/string/tuple(取決於sequence的型別)返回。

#求1~20之間的偶數

>>> list(filter(lambda x:x%2 == 0,range(1,21))) #python2.x使用filter(lambda x:x%2 == 0,range(1,21))

[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

reduce(function,sequence):function接收的引數個數只能為2,先把sequence中第乙個值和第二個值當引數傳給function,再把function的返回值和第三個值當引數傳給function,然後只返回乙個結果。

#求1~100之和

>>> from functools import reduce #python3.x之後需要匯入reduce模組

>>> reduce(lambda x,y:x+y,range(1,101))

5050

#求1~100之和,再加上10000

>>> reduce(lambda x,y:x+y,range(1,101),10000)

15050

匿名函式的用法

匿名函式的特點 1,匿名函式也是函式,呼叫時需要加上括號 2,匿名函式只能有一行 3,匿名函式的返回值不用return關鍵字 lambda 引數1,引數2 返回的表示式 匿名函式作為引數給其他函式使用,簡化 變數new func是函式 new func lambda x,y x y result n...

匿名函式高階用法

from functools import reduce reduce在python3被移動到了functools list1 1 2,3 4,5 6,7 8 匿名函式作用於list1中的元素,將每乙個元素 1 result1 list map lambda x x 1,list1 print re...

python匿名函式的例項用法

一般情況下,lambda就像是乙個函式簡化器,它允許在所用 中嵌入函式的定義。它們完全是可選的 一直都可以使用def替換它們 但只需嵌入少量可執行 就能使 結構更加簡潔,從而大大簡化 複雜性,提高 可讀性。1 減少重複 2 模組化 def函式 def square x return x 2 squa...