匿名函式:為了解決那些功能很簡單的需求而設計的一句話函式。
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)]
(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]
實現:將列表推導式改成生成器表示式就行了。由於惰性,每次呼叫函式的時候,生成器才執行一次,取出乙個值,乙個乙個取,即滿足需求。
defmultipliers():
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...