您好,登錄后才能下訂單哦!
這篇文章主要講解了“Python的lanbda表達式和三大推導式實例分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python的lanbda表達式和三大推導式實例分析”吧!
Lambda表達式又被稱之為匿名函數
格式
lambda 參數列表:函數體
def add(x,y):
return x+y
print(add(3,4))
#上面的函數可以寫成Lambda函數
add_lambda=lambda x,y:x+y
add_lambda(3,4)
函數就是有輸入和輸出
就是要把一個可迭代的對象按某個規則映射到新的對象上。
因此map函數要有兩個參數,一個是映射規則,一個是可迭代對象。
list1=[1,2,3,4,5]
r=map(lambda x:x+x,list)
print(list1(r))
結果:[2,4,6,8,10]
m1=map(lambda x,y:x*x+y,[1,2,3,4,5],[1,2,3,4,5])
print(list(ml))
結果:[2,6,12,20,30]
def is_not_none(s):
return s and len(s.strip())>0
list2=['','','hello','xxxx', None,'ai']
result=filter(is_not_none, list2)
print(list(result))
結果:[‘hello',‘xxxx',‘ai']
from functools import reduce
f=lambda x,y:x+y x=reduce(f,[1,2,3,4,5])
print(r)
結果:15=1+2+3+4+5
相當于每一次計算都是基于前一次計算的結果
還可以為reduce計算添加初始值:
from functools import reduce
f=lambda x,y:x+y x=reduce(f,[1,2,3,4,5],10)
print(r)
結果:25=10+1+2+3+4+5
list1=[1,2,3,4,5,6]
f=map(lambda x:x+x,list1)
print(list(f))
list2=[i+i for i in list1]
print(list2)
list3=[i**3 for i in list1]
print(list3)
#篩選列表的例子
list4=[i*4 for i in list1 if i>3]
print(list4)
#結果
[2,4,6,8,10,12]
[2,4,6,8,10,12]
[1,8,27,64,125,216]
[16,25,36]
直接把上面代碼copy下來,然后把列表改成集合
list1={1,2,3,4,5,6}
list2={i+i for i in list1}
print(list2)
list3={i**3 for i in list1}
print(list3)
#篩選列表的例子
list4={i*4 for i in list1 if i>3}
print(list4)
#結果
{2, 4, 6, 8, 10, 12}
{64, 1, 8, 216, 27, 125}#這里是亂序的
{16, 24, 20}
s={
"zhangsan":20,
"lisi":15,
"wangwu":31
}
#拿出所有的key,并變成列表
s_key=[ key for key, value in s.items()]
print(s_key)
#結果
['zhangsan','lisi','wangwu']
# 交換key和value位置,注意冒號的位置
s1={ value: key for key, value in s.items()}
print(s1)
#結果
{20:'zhangsan',15:'1isi',31:'wangwu'}
s2={ key: value for key, value in s.items() if key=="1isi"}
print(s2)
#結果
{"lisi":15}
閉包:一個返回值是函數的函數
import time
def runtime():
def now_time():
print(time.time())
return now_time #返回值是函數名字
f=runtime()#f就被賦值為一個函數now_time()了
f()#運行f相當于運行now_time()
再來看一個帶參數的例子:
假設有一個csv文件,內容有三行,具體如下:
a,b,c,d,e
1,2,3,4,5
6,7,8,9,10
def make_filter(keep):# keep=8
def the_filter(file_name):
file=open(file name)#打開文件
lines=file.readlines()#按行讀取文件
file.close()#關閉文件
filter_doc=[i for i in lines if keep in i]#過濾文件內容
return filter_doc
return the_filter
filter1=make_filter("8")#這一行調用了make_filter函數,且把8做為參數傳給了keep,接受了the_filter函數作為返回值
#這里的filter1等于函數the_filter
filter_result=filter1("data.csv")#把文件名data.csv作為參數傳給了函數the_filter
print(filter_result)
#結果
['6,7,8,9,10']
# 這是獲取函數開始運行時間的函數
import time
def runtime(func):
def get_time():
print(time.time())
func()# run被調用
return get_time
@runtime
def run()
print('student run')
#運行
run()
#結果
當前時間
student run
由于有裝飾器@runtime的存在,會把run這個函數作為參數丟到runtime(func)里面去,如果調整打印時間代碼的位置會有不同結果:
# 這是獲取函數結束運行時間的函數
import time
def runtime(func):
def get_time():
func()# run被調用
print(time.time())
return get_time
@runtime
def run()
print('student run')
#運行
run()
#結果
student run
當前時間
這里還要注意,這里還用到了閉包的概念,在運行run函數的時候,調用的實際上是get_time函數。
對于多個參數的函數如何調用,看下面例子
#有一個參數
import time
def runtime(func):
def get_time(i):
func(i)# run被調用
print(time.time())
return get_time
@runtime
def run(i)
print('student run')
#運行
run(1)
#有兩個參數
import time
def runtime(func):
def get_time(i,j):
func(i,j)# run被調用
print(time.time())
return get_time
@runtime
def run(i,j)
print('student run')
#運行
run(1,2)
可以發現,這樣寫對于函數的多態不是很好,因此可以寫為:
#自動適配參數
import time
def runtime(func):
def get_time(*arg):
func(*arg)# run被調用
print(time.time())
return get_time
@runtime
def run(i)
print('student1 run')
@runtime
def run(i,j)
print('student2 run')
#運行
run(1)
run(1,2)
再次進行擴展,更為普適的寫法,可以解決傳入類似i=4的關鍵字參數寫法:
#自動適配參數
import time
def runtime(func):
def get_time(*arg,**kwarg):
func(*arg,**kwarg)# run被調用
print(time.time())
return get_time
@runtime
def run(i)
print('student1 run')
@runtime
def run(*arg,**kwarg)
print('student2 run')
@runtime
def run()
print('no param run')
#運行
run(1)
run(1,2,j=4)
run()
感謝各位的閱讀,以上就是“Python的lanbda表達式和三大推導式實例分析”的內容了,經過本文的學習后,相信大家對Python的lanbda表達式和三大推導式實例分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。