python lambda 函式 學習筆記012

2021-08-20 22:50:54 字數 3022 閱讀 1729

# lambda 函式是用一條語句表達 匿名函式,可以用來代替小函式

def edit_story(words,func):

for word in words:

print(func(word))

stairs = ['thun','meow','thun','hiss']

edit_story(stairs,lambda word :word.capitalize()+'!')

thun!

meow!

thun!

hiss!

lambda函式又稱匿名函式,匿名函式就是沒有名字的函式,函式沒有名字也行?

當然可以啦。有些函式如果只是臨時一用,而且它的業務邏輯也很簡單時,就沒必要非給它取個名字不可。

先來看個簡單lambda函式

>>> lambda x, y : x+y

lambda> at 0x102bc1c80>

x和y是函式的兩個引數,冒號後面的表示式是函式的返回值,你能一眼看出這個函式就是是在求兩個變數的和,但作為乙個函式,沒有名字如何使用呢?

這裡我們暫且給這個匿名函式繫結乙個名字,這樣使得我們呼叫匿名函式成為可能。

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

>>>add

lambda> at 0x102bc2140>

>>> add(1,2)

3

它等同於常規函式

>>> def

add2(x, y):

...

return x+y

...>>>add2

>>> add2(1,2)

3

lambda使用場景:

#

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

#3.閉包

閉包:乙個定義在函式內部的函式,閉包使得變數即使脫離了該函式的作用域範圍也依然能被訪問到。

來看乙個用lambda函式作為閉包的例子。

>>> def

add(n):

...

return

lambda x:x+n

...>>> add2 = add(5)

>>> add2(15)

20這裡的lambda函式就是乙個閉包,在全域性作用域範圍中,add2(15)可以正常執行且返回值為20。之所以返回20是因為在add區域性作用域中,變數n的值在閉包的作用使得它在全域性作用域也可以被訪問到。

python lambda函式基礎

本文,我們學習python lambda函式。首先,看一下python lambda函式的語法,如下 f lambda parameter1,parameter2,expression lambda語句中,冒號前是引數,可以有0個或多個,用逗號隔開,冒號右邊是返回值。lambda語句構建的其實是乙個...

python lambda匿名函式

lambda定義乙個匿名函式 lambda只是乙個表示式,函式體比def簡單很多,很多時候定義def,然後寫乙個函式太麻煩,這時候就可以用lambda定義乙個匿名函式。lambda的主體是乙個表示式,而不是乙個 塊。僅僅能在lambda表示式中封裝有限的邏輯進去。參考鏈結 lambda的特性 乙個語...

python lambda 匿名函式

語法 lambda 引數 表示式 接受引數,執行表示式,返回結果 示例 乙個lambda函式,把引數加10,然後返回結果 x lambda a a 10print x 5 lambda函式可以接受任意數量的引數 示例 乙個lambda函式,將引數a與引數b相乘,然後返回結果 x lambda a,b...