python 使用 lambda 來建立匿名函式
lambda只是乙個表示式,函式體比def簡單很多。
lambda的主體是乙個表示式,而不是乙個**塊。僅僅能在lambda表示式中封裝有限的邏輯進去
lambda函式擁有自己的命名空間,且不能訪問自有引數列表之外或全域性命名空間裡的引數。
雖然lambda函式看起來只能寫一行,卻不等同於c或c++的內聯函式,後者的目的是呼叫小函式時不占用棧記憶體從而增加執行效率。
lambda函式的語法只包含乙個語句,如下:
lambda
[arg1
[,arg2
,.....
argn
]]:expression
#!/usr/bin/python
# -*- coding: utf-8 -*-
# 可寫函式說明
sum =lambda
arg1, arg2: arg1 + arg2;
# 呼叫sum函式
("相加後的值為 : "
, sum(
10,
20))
("相加後的值為 : "
執行結果:
filter()函式
用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表
,序列的每個元素作為引數傳遞給函式進行
判斷,然後返回 true 或 false,最後將返回 true 的元素放到新列表中
語法:filter
(function
,iterable)
引數:function -- 判斷函式
iterable -- 可迭代物件
map()函式m
ap()函式
會根據提供的函式對指定序列做對映
, map() 函式語法:
map(function
,iterable
,...)
引數:function -- 函式
iterable -- 乙個或多個序列
返回值:
python 2.x 返回列表。
python 3.x 返回迭代器。
示例:map
(lambdax:
x** 2,
[1, 2
, 3, 4
, 5])# 使用 lambda 匿名函式[1
, 4, 9
, 16
, 25]
# 提供了兩個列表,對相同位置的列表資料進行相加
>>>
map(
lambdax,
y: x+
y, [1
, 3, 5
, 7, 9
], [2
, 4, 6
, 8, 10])
[3, 7
, 11
, 15
, 19]
reduce() 函式
在 python 2 是內建函式, 從python 3 開始移到了 functools 模組
從左到右對乙個序列的項累計地應用有兩個引數的函式,以此合併序列到乙個單一值。
語法:reduce(function, sequence[, initial])
返回結果:
value
(一合併的值)
示例:
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) 計算的就是((((1+2)+3)+4)+5)。
如果提供了 initial 引數,計算時它將被放在序列的所有項前面,如果序列是空的,它也就是計算的預設結果值了
4)巢狀使用
#lambda巢狀到普通函式中,lambda函式本身做為return的值
def
increment(n):
# 定義函式
return lambda
x: x+n
f=increment(
4)
# 通過函式定義lamba匿名函式
相當於:
lambda
x: x+
4print
(f(2
))
# 呼叫匿名函式
執行結果: 6
其他形式格式使用基本都符合以上原理,大同小異
Python中lambda表示式
一 lambda表示式形式 lambda後面跟乙個或多個引數,緊跟乙個冒號,以後是乙個表示式。冒號前是引數,冒號後是返回值。lambda是乙個表示式而不是乙個語句。lambda表示式可以出現在python語法不允許def出現的地方。lambda表示式返回乙個值。二 與def的區別 lambda用來編...
python中Lambda表示式
lambda表示式 lambda 引數,引數,return 的表示式 def ds x return 2 x 1 print ds 3 7g lambda x 2 x 1 print g 3 7add lambda x,y x y print add 1,5 6 兩個bef 過濾器 filter 對...
Python中lambda表示式學習
lambda只是乙個表示式,函式體比def簡單很多。lambda的主體是乙個表示式,而不是乙個 塊。僅僅能在lambda表示式中封裝有限的邏輯進去。lambda表示式是起到乙個函式速寫的作用。允許在 內嵌入乙個函式的定義。如下例子 定義了乙個lambda表示式,求三個數的和。再看乙個例子 用lamb...