Python語言中的重要函數(shù)對象用法小結(jié)
高級(jí)函數(shù)對象
lambda函數(shù)
python使用lambda來創(chuàng)建匿名函數(shù)。所謂匿名函數(shù),就是不再使用像def語句這樣標(biāo)準(zhǔn)的形式定義函數(shù)。
lambda [arg1,[arg2,...argn]]:expression
使用lambda函數(shù)的語法定義函數(shù),需要注意以下兩點(diǎn):
- 冒號(hào)之前的arg1,arg2,…表示他們是這個(gè)函數(shù)的參數(shù)
- 匿名函數(shù)不需要return來返回值,表達(dá)式本身的結(jié)果就是返回值
定義匿名函數(shù)
sayHello = lambda : print("hello,python") sayHello()
使用lambda函數(shù)實(shí)現(xiàn)兩數(shù)相加
sum = lambda arg1,arg2 : arg1+arg2; print('相加后的值:',sum(10,20)) print('相加后的值:',sum(20,20))
map()函數(shù)
map()函數(shù)是python內(nèi)置的高階函數(shù),會(huì)根據(jù)提供的函數(shù)對指定序列做映射,第一個(gè)參數(shù)function是個(gè)函數(shù)對序列中每個(gè)元素都調(diào)用function函數(shù),返回包含每次function函數(shù)返回值的新序列
map(function,iterable,...)
- function: 是個(gè)函數(shù),通過函數(shù)依次作用在序列中的每個(gè)元素中。
- iterable: 一個(gè)或多個(gè)序列,也被稱為可迭代對象。
對列表中每個(gè)元素平方
def fun(x): return x*x result=map(fun,[1,2,3]) print(list(result))
對列表中每個(gè)元素加3
result=map(lambda x: x+3,[1,3,5,6]) print(list(result))
兩個(gè)列表的每個(gè)元素實(shí)現(xiàn)相加
result=map((lambda x,y:x+y),[1,2,3],[6,7,9]) print(list(result))
reduce()函數(shù)
reduce(function,iterable)
- function: 接收函數(shù),必須有兩個(gè)參數(shù)
- iterable: 一個(gè)或多個(gè)序列,序列也稱為迭代對象
使用reduce()函數(shù)對列表中的元素進(jìn)行累加
from functools import reduce def add(x,y): return x+y data = [1,2,3,4] r=reduce(add,data) print(r)
from functools import reduce data=[1,2,3,4] fun=lambda x,y:x+y r2=reduce(fun,data) print(r2)
該計(jì)算相當(dāng)于(((1+2)+3)+4)=10
迭代器
迭代器是訪問集合元素的一種方式。迭代器對象從集合的第一個(gè)元素開始訪問,直到所有元素被訪問完結(jié)束。迭代器只能往前不能后退。
使用迭代器
lst=[1,2,3,4] it=iter(lst) print(next(it)) print(next(it)) print(next(it))
自定義迭代器
對于要返回迭代器的類,迭代器對象被要求支持下面兩個(gè)魔法方法
(1)iter()返回迭代器本身。
(2)next()返回容器的下一個(gè)元素的值。
斐波那契數(shù)列
def fib(max): a,b=1,1 idx=0 ls=[] while True: if idx==max: return ls ls.append(a) a,b=b,a+b idx=idx+1 if __name__=="__main__": result = fib(5) print(result)
自定義迭代器實(shí)現(xiàn)斐波那契數(shù)列
class Fibs(object): def __init__(self,max): self.max=max self.a=0 self.b=1 self.idx=0 def __iter__(self): return self def __next__(self): fib=self.a if self.idx==self.max: raise StopIteration self.idx=self.idx+1 self.a,self.b=self.b,self.a+self.b return fib if __name__=='__main__': fibs=Fibs(5) print(list(fibs))
生成器
生成器是迭代器的一種實(shí)現(xiàn)。生成器不會(huì)把結(jié)果保存在一個(gè)系列中,而是保存生成器的狀態(tài),在每次進(jìn)行迭代時(shí)返回一個(gè)值,直到遇到StopIteration異常時(shí)結(jié)束。
生成器的好處是延遲計(jì)算,一次返回一個(gè)結(jié)果。它不會(huì)一次生成所有的結(jié)果,這對于處理大數(shù)據(jù)量會(huì)非常有用。
生成器函數(shù)
在函數(shù)中如果出現(xiàn)了yield關(guān)鍵字,那么該函數(shù)就不再是普通函數(shù),而是生成器函數(shù)。
使用yield語句而不是return語句返回結(jié)果。yield語句一次返回一個(gè)結(jié)果,在每個(gè)結(jié)果中間掛起函數(shù)的狀態(tài),以便下次從它離開的地方繼續(xù)執(zhí)行。
簡單的生成器函數(shù)
def mygen(): print('gen() 1') yield 1 print('gen() 2') yield 2 print('gen() 3') yield 3 gen =mygen() print(next(gen)) print(next(gen)) print(next(gen))
使用生成器函數(shù)生成一個(gè)含有n個(gè)奇數(shù)的生成器,使用for語句迭代輸出
def odd(max): n=1 count = 0 while True: yield n n+=2 count=count+1 if count == max: raise StopIteration odd_num=odd(3) for num in odd_num: print(num)
迭代器同樣的效果
class odd(object): def __init__(self,max): self.count=0 self.max=max self.start=-1 def __iter__(self): return self def __next__(self): self.start+=2 self.count=self.count+1 if self.count==self.max: raise StopIteration return self.start odd_num=odd(3) for num in odd_num: print(num)
使用生成器生成斐波那契數(shù)列
def Fibs(max): a,b=1,1 count=0 while True: if count == max: raise StopIteration yield a a,b=b,a+b count=count+1 if __name__=="__main__": fib=Fibs(5) for item in fib: print(item)
裝飾器
裝飾器本質(zhì)是一個(gè)python函數(shù),它可以讓其他函數(shù)在不需要做任何代碼變動(dòng)的前提下增加額外的功能,裝飾器的返回值也是一個(gè)函數(shù)對象。
簡單的裝飾器
先定義兩個(gè)簡單的數(shù)學(xué)函數(shù)
def add(a,b): return a+b def subtraction(a,b): return a-b a=5 b=1 print('{0}+{1}={2}'.format(a,b,add(a,b))) print('{0}-{1}={2}'.format(a,b,subtraction(a,b)))
def decorator(func): def inner(a,b): print('輸入?yún)?shù) a={0},b={1}'.format(a,b)) f1=func(a,b) return f1 return inner @decorator def add(a,b): return a+b @decorator def subtraction(a,b): return a-b a=5 b=1 print('{0}+{1}={2}'.format(a,b,add(a,b))) print('{0}-{1}={2}'.format(a,b,subtraction(a,b)))
使用裝飾器傳遞參數(shù)
def pre_str(pre=''): def decorator(func): def inner(a,b): print('裝飾器參數(shù) pre={0}'.format(pre)) print('輸入?yún)?shù) a={0},b={1}'.format(a,b)) f1=func(a,b) return f1 return inner return decorator @pre_str('add') def add(a,b): return a+b @pre_str('subtraction') def subtraction(a,b): return a-b a=5 b=1 print('{0}+{1}={2}'.format(a,b,add(a,b))) print('{0}-{1}={2}'.format(a,b,subtraction(a,b)))
基于類的裝飾器
class Test(): def __init__(self,func): self.func=func def __call__(self, *args, **kwargs): print('The current function:%s' % self.func.__name__) return self.func @Test def test1(): print("Hello") test1()
到此這篇關(guān)于Python語言中的重要函數(shù)對象用法的文章就介紹到這了,更多相關(guān)Python函數(shù)對象用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 自動(dòng)批量打開網(wǎng)頁的示例
今天小編就為大家分享一篇python 自動(dòng)批量打開網(wǎng)頁的示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02使用 Python 合并多個(gè)格式一致的 Excel 文件(推薦)
這篇文章主要介紹了使用 Python 合并多個(gè)格式一致的 Excel 文件,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12python+selenium的web自動(dòng)化上傳操作的實(shí)現(xiàn)
這篇文章主要介紹了python+selenium的web自動(dòng)化上傳操作的實(shí)現(xiàn),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08python 自動(dòng)監(jiān)控最新郵件并讀取的操作
這篇文章主要介紹了python 自動(dòng)監(jiān)控最新郵件并讀取的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03Python?hashlib模塊與哈希算法保護(hù)數(shù)據(jù)完整性教程
hashlib模塊為Python提供了一種簡便的方式來使用各種哈希算法,如MD5、SHA-1、SHA-256等,哈希函數(shù)廣泛用于密碼學(xué)、數(shù)據(jù)完整性驗(yàn)證和安全存儲(chǔ)等領(lǐng)域2024-01-01tsv、csv、xls等文件類型區(qū)別及如何用python處理詳解
近日在處理數(shù)據(jù)的時(shí)候發(fā)現(xiàn)有的文件為csv文件,有的為tsv文件,這篇文章主要給大家介紹了關(guān)于tsv、csv、xls等文件類型區(qū)別及如何用python處理的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04