python匿名函数调用_python3笔记十六:python匿名函数和高阶函数
一:學習內容
lambda函數
map函數與reduce函數
filter函數
sorted函數
二:匿名函數-lambda
1.概念:不使用def這樣的語句去定義函數,使用lambda來創建匿名函數
2.特點:
lambda只是一個表達式,函數體比def簡單
實現的邏輯比較簡單,主體是一個表達式,而不是代碼塊,lambda表達式中封裝簡單的邏輯
lambda函數有自己的命名空間,且不能訪問自由參數列表之外的或者全局命名空間的參數
3.格式:
lambda 參數1,參數2,......,參數n:expression
4.lambda函數練習一
a=lambda x:x+1
a(1)
a(2)
lambda作為一個表達式,定義了一個匿名函數,上面的代碼x為入口參數,x+1為函數體,用函數來表示為:
def g(x):
return x+1
5.lambda函數練習二
a=lambda x,y,z:(x+y)**z
print(a(1,2,3))
6.lambda函數練習三
def make_repeater(n):
return lambda s:s*n
twice=make_repeater(2)
twice('word')
twice(5)
上面的函數可以轉換為:
twice=lambda s,n:s*n
twice('word',2)
twice(5,2)
7.lambda函數練習四
lambda表達式會返回一個函數對象,如果沒有變量接受這個返回值,它很快就會被丟棄,也正是由于lambda只是一個表達式,所以它可以直接作為list、dict等成員
lists=[lambda s:s**3,lambda a:a**3]
data=lists[0]
data(2)
三:高階函數-map和reduce
python內置了map()和reduce函數()
1.map()函數
格式:map(fn,lsd)
參數1是一個函數,fn只有一個參數
參數2是一個序列
功能:將傳入的函數依次作用在序列中的每一個元素,并把結果作為新的Iterator返回
舉例1:
#將單個字符轉成對應字面量整數
def chr2int(chr):
return {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}[chr]
list1 = ["2","1","6","5"]
#惰性列表,需要用list顯示轉換才會顯示
res = map(chr2int,list1)
print(res)
print(list(res))
舉例2:
#將整數元素的序列轉為字符型的
#[1,2,3,4] ["1","2","3","4"]
a = [1,2,3,4]
print(list(map(str,a)))
2.reduce()函數
格式:reduce(fn,lsd)
參數1為函數,fn有兩個參數
參數2位列表
功能:一個函數作用在序列上,這個函數必須接收兩個參數,reduce把結果繼續和序列的下一個元素累計運算
舉例1:
from functools import reduce
#求一個序列的和
def mySum(x,y):
return x+y
list2 = [1,2,3,4,5]
r = reduce(mySum,list2)
print(r)
3.map()函數和reduce()函數結合使用
舉例1:
#將字符串轉成對應字面量數字
def str2int(str):
def fc(x,y):
return x*10 + y
def fs(chr):
return {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}[chr]
return reduce(fc,map(fs,list(str)))
a = str2int("13579")
print(a)
print(type(a))
四:高階函數-filter()
1.filter()函數
格式:filter(fn,lsd)
參數1為函數
參數2位序列
功能:用于過濾序列,即把傳入的參數依次作用于序列的每個元素,根據返回的是True還是False決定是否保留該元素
舉例1:
list1 = [1,2,3,4,5]
#篩選條件,偶數保留
def func(num):
if num % 2 ==0:
return True
return False
#惰性序列,需要顯示轉換為列表才能展示數據
res = filter(func,list1)
print(list(res))
print(list1)
舉例2:
data = [["姓名","年齡","愛好"],["tom",25,"無"],["hdd",26,"游泳"]]
def fun2(v):
v = str(v)
if v == "無":
return False
return True
for line in data:
s = filter(fun2,line)
print(list(s))
四:高階函數-sorted()
用于排序
1.sorted()函數--普通排序
list1 = [4,7,2,6,3]
list2 = sorted(list1) #默認升序排序
print(list1)
print(list2)
2.sorted()函數--降序排序
list5 = [4,7,2,6,3]
#reverse 按升序排完以后反轉
list6 = sorted(list5,reverse=True)
print(list5)
print(list6)
3.sorted()函數--字符串排序按ASCII碼值排序
#字符串排序,比較ASCII碼值
list7 = ["b","d","a","e"]
list8 = sorted(list7)
print(list7)
print(list8)
4.sorted()函數-自定義排序規則
#按絕對值大小排序
list3 = [4,-7,2,6,-3]
#key接受函數來實現自定義排序規則
list4 = sorted(list3,key=abs)
print(list3)
print(list4)
5.sorted()函數-自定義排序規則2
#按字符串長短排序,函數可以自己寫
def myLen(str):
return len(str)
list9 = ["b333","d11111111","a22","e4322"]
list10 = sorted(list9,key=myLen)
print(list9)
print(list10)
總結
以上是生活随笔為你收集整理的python匿名函数调用_python3笔记十六:python匿名函数和高阶函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何把配置文件集成到.exe中_VSCo
- 下一篇: python能print中文吗_win1