python學習日記 匿名函式)

2022-09-03 01:27:09 字數 3123 閱讀 4147

匿名函式:為了解決那些功能很簡單的需求而設計的一句話函式。

python 使用 lambda 來建立匿名函式。

所謂匿名,意即不再使用 def 語句這樣標準的形式定義乙個函式。

1

lambda 只是乙個表示式,函式體比 def

簡單很多。

2lambda的主體是乙個表示式,而不是乙個**塊。僅僅能在lambda表示式中封裝有限的邏輯進去。

3lambda

函式擁有自己的命名空間,且不能訪問自己引數列表之外或全域性命名空間裡的引數。

4 雖然lambda函式看起來只能寫一行,卻不等同於c或c++的內聯函式,後者的目的是呼叫小函式時不占用棧記憶體從而增加執行效率

匿名函式

#

定義乙個函式實現加法運算

defadd(x,y):

return x+y

print(add(1,2))

#匿名函式實現

a = lambda x,y:x+y#

lamba 引數:返回值

print(a(1,2))

由上面可以看出,匿名函式是可以有函式名的。不過它也真的可以匿名,在和其他功能函式合作的時候。

實現:

dic=

deffunc(k):

return

dic[k]

print(max(dic,key=func))

轉換成匿名函式:

dic=

print(max(dic,key=lambda k:dic[k]))

實現:

l = [1,2,3,4,5,6]

deffunc(x):

return x**2f =map(func,l)

for i in

f:

print(i,end='

')

匿名函式實現:

f1 = map(lambda x:x**2,[1,2,3,4,5,6])

for i in

f1:

print(i,end='

')

實現:

l = [5,8,11,9,15]

deffunc(x):

return x > 10s =filter(func,l)

for i in

s:

print(i,end='

')

匿名函式實現:

s1 = filter(lambda x:x > 10,[5,8,11,9,15])

for i in

s1:

print(i,end='

')

現有兩個元組(('a'),('b')),(('c'),('d')),請使用python中匿名函式生成列表[,]

實現:

t1 = (('

a'),('b'

))t2 = (('

c'),('d'

))r1 =zip(t1,t2)

deffunc(t):

return

r2 =map(func,r1)

print(list(r2))#

要求生成列表

匿名函式實現:

r2 = map(lambda t:,zip((('

a'),('

b')),(('

c'),('d'

))))

print(list(r2))

min max filter map sorted lambda

還能夠這樣寫:

t1 = (('

a'),('b'

))t2 = (('

c'),('d'

))r = lambda t1,t2:[ for i,j in

zip(t1,t2)]

print

(r(t1,t2))

r1 = [ for i,j in

zip(t1,t2)]

print(r1)

1.下面程式的輸出結果是:

d = lambda p:p*2t = lambda p:p*3x = 2x =d(x)

x =t(x)

x =d(x)

print x

很容易看出來,不再贅述。

3.以下**的輸出是什麼?請給出答案並解釋。

defmultipliers():

return [lambda x:i*x for i in range(4)]

print([m(2) for m in

multipliers()])

請修改multipliers的定義來產生期望的結果。

輸出結果:

解析:1、先定義乙個函式 multipliers,未呼叫。

2、在print語句裡面呼叫函式 multipliers,得到的返回值是乙個列表推導式

3、在 i 分別等於0,1,2,3的時候,都生成乙個 lamba x:i*x,即返回值是4個 lamba x:i*x

4、四個 lamba x:i*x都是名為 m 的函式,此時呼叫m,即m(2)

5、呼叫m函式的時候,x=2,i=3,因為在生成第四個lamba x:i*x的時候,i=3,最終賦值,前面i=0、1、2的時候函式m都未呼叫

6、即輸出[3*2,3*2,3*2,3*2,]——>[6,6,6,6]

如題又說修改函式multipliers的定義來產生期望的結果:

既是想要使i=0、1、2、3的時候分別呼叫函式m,使輸出為[0,2,4,6]

實現:將列表推導式改成生成器表示式就行了。由於惰性,每次呼叫函式的時候,生成器才執行一次,取出乙個值,乙個乙個取,即滿足需求。

def

multipliers():

return (lambda x:i*x for i in range(4))

print([m(2) for m in multipliers()])

pass

Python學習日記 十二 匿名函式

匿名函式 未解決一些簡單的需求而設計的函式 語法 func lambda x x 2func 函式名 lambda 類似def的關鍵字 x 引數 x 2 返回值表示式 適用內建函式 min max filter sorted map 等 使用 l 2,5,6,1,0,4,12 print list ...

python學習 匿名函式

當我們在傳入函式時,有些時候,不需要顯式地定義函式,直接傳入匿名函式更方便。在python中,對匿名函式提供了有限支援。還是以map 函式為例,計算f x x2時,除了定義乙個f x 的函式外,還可以直接傳入匿名函式 list map lambda x x x,1,2,3,4,5,6,7,8,9 1...

Python學習 匿名函式

當我們在傳入函式時,有些時候,不需要顯式地定義函式,直接傳入匿名函式更方便。在python中,對匿名函式提供了有限支援。還是以map 函式為例,計算f x x2時,除了定義乙個f x 的函式外,還可以直接傳入匿名函式 list map lambda x x x,1,2,3,4,5,6,7,8,9 1...