1. 程式人生 > >python之lambda 函數

python之lambda 函數

return one 屏蔽 函數作為參數 無需 地址 表達式 moc 內置函數

匿名函數lambda:是指一類無需定義標識符(函數名)的函數或子程序。
lambda 函數可以接收任意多個參數 (包括可選參數) 並且返回單個表達式的值。

語法:

lambda [arg1 [,arg2,.....argn]]:expression

冒號前是參數,可以有多個,用逗號隔開,冒號右邊的為表達式(只能為一個)。其實lambda返回值是一個函數的地址,也就是函數對象。

舉例:

1.將lambda函數賦值給一個變量,通過這個變量間接調用該lambda函數。

def sum(x,y):
    return x+y
print(sum(1,2))

使用lambda函數:

sum = lambda x,y : x+y
print(sum(1,2))

2.將lambda函數作為參數傳遞給其他函數。部分Python內置函數接收函數作為參數。

def odd(x):
    return x%2
temp = range(10)
show = filter(odd,temp)
print(list(show))   #[1, 3, 5, 7, 9]

使用lambda函數:

print(list(filter(lambda x: x%2,range(10))))    #[1, 3, 5, 7, 9]

此時lambda函數用於指定過濾列表元素的條件。

再比如:

map(lambda x: x+1, [1, 2,3])    #[2, 3, 4]

此時lambda函數用於指定對列表中每一個元素的共同操作。

另外還有:sorted()、map()

3.將lambda函數作為其他函數的返回值,返回給調用者。

函數的返回值也可以是函數。例如return lambda x, y: x+y返回一個加法函數。這時,lambda函數實際上是定義在某個函數內部的函數,稱之為嵌套函數,或者內部函數。對應的,將包含嵌套函數的函數稱之為外部函數。內部函數能夠訪問外部函數的局部變量,這個特性是閉包(Closure)編程的基礎。

4.將lambda函數賦值給其他函數,從而將其他函數用該lambda函數替換。

例如,為了把標準庫time中的函數sleep的功能屏蔽(Mock),我們可以在程序初始化時調用:time.sleep=lambda x:None

。這樣,在後續代碼中調用time庫的sleep函數將不會執行原有的功能。例如,執行time.sleep(3)時,程序不會休眠3秒鐘,而是什麽都不做

5.將if...else語句縮減為單一的條件表達式,

語法為:expression1 if A else expression2

如果A為True,條件表達式的結果為expression1,否則為expression2

def s(x):
    if x==1:
        return "yes"
    else:
        return "no"
print(s(0))
print(s(1))

使用lambda函數:

s=lambda x:"yes" if x==1 else "no"
print(s(0))
print(s(1))

python之lambda 函數