資訊內(nèi)容
介紹python的函數(shù)裝飾器

相關(guān)免費(fèi)學(xué)習(xí)推薦:python視頻教程wzX少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)
pyhton的函數(shù)裝飾器可以將裝飾器函數(shù)通過(guò)@方法很便捷的為函數(shù)增添功能wzX少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)
""" 一.函數(shù)用法 """def sum_list(list): """將列表中的數(shù)字求和 輸入:含有數(shù)字的列表 list=[2,6,3,2,1] sum_list(list) """ sum_=0 for i in list: sum_+=i return sum_#1.將函數(shù)sum_list賦值給變量list_sum,從而產(chǎn)生的新名稱(chēng)函數(shù)list_sum()list_sum=sum_list list_sum([2,5,3,8,6])#2.刪除函數(shù)del list_sum list_sum([4,3,5,2])#NameError: name 'list_sum' is not defined#3.函數(shù)中定義函數(shù)def sum_(list): def sum_list(list): """將列表中的數(shù)字求和 輸入:含有數(shù)字的列表 list=[2,6,3,2,1] sum_list(list) """ sum_ = 0 for i in list: sum_ += i return sum_ return sum_list(list)sum_([3,6,3,2])#4.將函數(shù)作為參數(shù)傳入另一個(gè)函數(shù)def print_(): print('好開(kāi)心!')print_()#定義一個(gè)嵌套函數(shù),參數(shù)為定義好的函數(shù)def deco(function): def wrapped(): print('這個(gè)函數(shù)被嵌套了') function() return wrapped""" 二,函數(shù)裝飾器 """#1.用函數(shù)裝飾器替代嵌套函數(shù)if '嵌套函數(shù)'=='嵌套函數(shù)': #定義一個(gè)打印函數(shù) def print_(): print('好開(kāi)心!') print_() #定義一個(gè)嵌套函數(shù),參數(shù)為定義好的函數(shù) def deco(function): def wrapped(): print('這個(gè)函數(shù)被嵌套了') function() return wrapped print_2=deco(print_)#將嵌套函數(shù)的功能賦值給新函數(shù)print_2() print_2()if '函數(shù)裝飾器'=='函數(shù)裝飾器': #或者采用裝飾器的方法 def deco(function): def wrapped(): print('這個(gè)函數(shù)被嵌套了') function() return wrapped @deco#可以直接將函數(shù)deco()嵌套在函數(shù)print_()上,形成新的函數(shù) def print_(): print('好開(kāi)心!') print_()#2.用一個(gè)函數(shù)裝飾器裝飾多個(gè)函數(shù)def print_name(function): """該裝飾器函數(shù)將為函數(shù)增加打印函數(shù)名字的功能""" import functools#該語(yǔ)句可以使函數(shù)被裝飾后,函數(shù)信息保持不變 @functools.wraps(function) def wrapped(*args,**kwargs): """ *args:表示可傳入任意數(shù)量的單值對(duì)象,函數(shù)將自動(dòng)將其收集在元組中 **kwargvs:表示可以傳入任意數(shù)量的字典鍵值對(duì),比如:value=3,函數(shù)將自動(dòng)收集為字典 """ print('函數(shù)的名字為%s'%function.__name__) return function(*args,**kwargs)#執(zhí)行傳入?yún)?shù)的函數(shù) return wrapped @print_namedef sum_list(list): sum_=0 for i in list: sum_+=i return sum_ sum_list([5,7,3,2])sum_list.__name__#經(jīng)過(guò)檢查,函數(shù)名稱(chēng)沒(méi)有發(fā)生改變@print_namedef small_value(list): return min(list)small_value([4,8,4,2,4])#3.用多個(gè)函數(shù)裝飾器裝飾一個(gè)函數(shù),靠近函數(shù)的裝飾器將被優(yōu)先執(zhí)行def print_hash(function): """該裝飾器函數(shù)將為函數(shù)增加打印函數(shù)hash值的功能""" def wrapped(*args,**kwargs): """ *args:表示可傳入任意數(shù)量的單值對(duì)象,函數(shù)將自動(dòng)將其收集在元組中 **kwargvs:表示可以傳入任意數(shù)量的字典鍵值對(duì),比如:value=3,函數(shù)將自動(dòng)收集為字典 """ print('函數(shù)的名字為%s'%function.__hash__) return function(*args,**kwargs)#執(zhí)行傳入?yún)?shù)的函數(shù) return wrappeddef print_name(function): """該裝飾器函數(shù)將為函數(shù)增加打印函數(shù)名字的功能""" def wrapped(*args,**kwargs): """ *args:表示可傳入任意數(shù)量的單值對(duì)象,函數(shù)將自動(dòng)將其收集在元組中 **kwargvs:表示可以傳入任意數(shù)量的字典鍵值對(duì),比如:value=3,函數(shù)將自動(dòng)收集為字典 """ print('函數(shù)的名字為%s'%function.__name__) return function(*args,**kwargs)#執(zhí)行傳入?yún)?shù)的函數(shù) return wrapped#為函數(shù)增添打印函數(shù)名稱(chēng)和函數(shù)值的功能@print_hash @print_namedef small_value(list): return min(list)用類(lèi)作為裝飾wzX少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)
#用類(lèi)作為裝飾class FirstDecorator(object):#需要引入object def __init__(self,func): self.__func=func def __call__(self, *args, **kwargs):# __call__ 方法可以讓函數(shù)使用裝飾 import time print('執(zhí)行時(shí)間:{}'.format(time.ctime(time.time()))) self.__func(*args)@FirstDecorator#使用類(lèi)的裝飾def print_(*number): print(number)print_(5,63,8,4,6,2)大量免費(fèi)學(xué)習(xí)推薦,敬請(qǐng)?jiān)L問(wèn)python教程(視頻)
以上就是介紹python的函數(shù)裝飾器的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注少兒編程網(wǎng)其它相關(guān)文章!wzX少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

- 上一篇
寫(xiě)一個(gè)Python小游戲——四連環(huán)(重力四子棋)
簡(jiǎn)介新手學(xué)習(xí)Python,寫(xiě)第一個(gè)Python小游戲——四連環(huán)(重力四子棋)游戲規(guī)則如下:棋盤(pán)為8*6玩家輸入列號(hào)與電腦下四子棋,棋會(huì)隨著重力下降勝利方式是一行/一列/左右斜線連四顆棋子分析:拆分成了這幾個(gè)部分,用自定義函數(shù)封裝,便于修改:·初始化·棋盤(pán)顯示·玩家輸入·游戲運(yùn)行·判斷勝利引用庫(kù):rand
- 下一篇
python獲取當(dāng)前時(shí)間
簡(jiǎn)介python獲取當(dāng)前時(shí)間的方法:首先下載安裝好python;然后創(chuàng)建一個(gè)py文件并輸入內(nèi)容“datetime.datetime.now...”;接著打開(kāi)cmd窗口,輸入“pythonpy文件名”命令;最后點(diǎn)擊回車(chē)即可獲取到當(dāng)前的時(shí)間。本教程操作環(huán)境:宏基S40-51電腦、Windows10家庭中文版