日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python学习日记(匿名函数)

發布時間:2023/12/1 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python学习日记(匿名函数) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

匿名函數

簡介

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

python 使用 lambda 來創建匿名函數。

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

1 lambda 只是一個表達式,函數體比 def 簡單很多。 2 lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。 3 lambda 函數擁有自己的命名空間,且不能訪問自己參數列表之外或全局命名空間里的參數。 4 雖然lambda函數看起來只能寫一行,卻不等同于C或C++的內聯函數,后者的目的是調用小函數時不占用棧內存從而增加運行效率 匿名函數 #定義一個函數實現加法運算 def add(x,y):return x+y print(add(1,2)) #匿名函數實現 a = lambda x,y:x+y# lamba 參數:返回值 print(a(1,2))

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

求字典dic={'k1':10,'k2':100,'k3':30}中value最大的key。

實現:

dic={'k1':10,'k2':100,'k3':30} def func(k):return dic[k] print(max(dic,key=func))

轉換成匿名函數:

dic={'k1':10,'k2':100,'k3':30} print(max(dic,key=lambda k:dic[k]))

求列表l = [1,2,3,4,5,6]的平方。

實現:

l = [1,2,3,4,5,6] def func(x):return x**2 f = 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=' ')

篩選出列表中大于10的數字

實現:

l = [5,8,11,9,15] def func(x):return x > 10 s = 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中匿名函數生成列表[{'a':'c'},{'b':'d'}]

實現:

t1 = (('a'),('b')) t2 = (('c'),('d')) r1 = zip(t1,t2)def func(t):return {t[0]:t[1]}r2 = map(func,r1) print(list(r2))#要求生成列表

匿名函數實現:

r2 = map(lambda t:{t[0]:t[1]},zip((('a'),('b')),(('c'),('d')))) print(list(r2))

提示:看到要求使用匿名函數實現的,就要立刻聯想到能和匿名函數一起使用的功能函數。

min max filter map sorted <——> lambda

還能夠這樣寫:

t1 = (('a'),('b')) t2 = (('c'),('d')) r = lambda t1,t2:[{i:j} for i,j in zip(t1,t2)] print(r(t1,t2)) r1 = [{i:j} for i,j in zip(t1,t2)] print(r1)

二、

1.下面程序的輸出結果是: d = lambda p:p*2 t = lambda p:p*3 x = 2 x = d(x) x = t(x) x = d(x) print x

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

三、

3.以下代碼的輸出是什么?請給出答案并解釋。 def multipliers():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

轉載于:https://www.cnblogs.com/smallfoot/p/10066756.html

總結

以上是生活随笔為你收集整理的python学习日记(匿名函数)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。