实战IT培训机构_黄色激情网站_IT培训班选大学生IT技术培训中心_黄色激情视频网站_中公优就业

400-650-7353
您所在的位置:首頁 > IT干貨資料 > python > 【Python基礎知識】Python裝飾器函數(shù)概念

【Python基礎知識】Python裝飾器函數(shù)概念

  • 發(fā)布: python培訓
  • 來源:
  • 2021-07-26 14:47:29
  • 閱讀()
  • 分享
  • 手機端入口

裝飾器函數(shù)是在不改變原來函數(shù)的情況下,添加額外功能的函數(shù)。裝飾器函數(shù)內(nèi)部還有一個函數(shù),返回值是內(nèi)部函數(shù)名。定義裝飾器函數(shù)的語法格式如下:

def 裝飾器函數(shù)名(參數(shù)1):

函數(shù)體

def 內(nèi)部函數(shù)名(參數(shù)2):

函數(shù)體

return 內(nèi)部函數(shù)名

其中,參數(shù)1接收原函數(shù)的函數(shù)名;參數(shù)2接收原函數(shù)的參數(shù)。

例如,某月餅零售價為5元一個,但是禮盒裝月餅(8個裝)為200元一盒,那么同樣的月餅,使用禮盒包裝后,可能就加價160元。

首先定義兩個函數(shù),一個是月餅函數(shù),另一個是禮盒函數(shù)。

定義月餅函數(shù),代碼如下:

def cake():

print('五仁月餅零售價5元')

調(diào)用月餅函數(shù),代碼如下:

cake()

調(diào)用月餅函數(shù)后,運行結(jié)果:

五仁月餅零售價5元

定義禮盒函數(shù),代碼如下:

def box():

print('禮盒加價160元')

def get_cake():

cake()

調(diào)用禮盒函數(shù),代碼如下:

box()

調(diào)用禮盒函數(shù)后,運行結(jié)果:

禮盒加價160元

運行結(jié)果顯然不符合預期,沒有打印“五仁月餅零售價5元”,這是因為只是在禮盒函數(shù)內(nèi)定義了get_cake()函數(shù),但是沒有調(diào)用這個函數(shù)。修改禮盒函數(shù),代碼如下:

def box():

print('禮盒加價160元')

def get_cake():

cake()

get_cake() # 調(diào)用函數(shù)

再次調(diào)用禮盒函數(shù)后,運行結(jié)果:

禮盒加價160元

五仁月餅零售價5元

但是,同一種禮盒可能會裝不同的月餅,現(xiàn)有三種月餅分別為五仁、豆沙、蛋黃,這三種月餅的零售價分別為5元、5元、8元。

定義豆沙月餅函數(shù),代碼如下:

def cake1():

print('豆沙月餅零售價5元')

定義蛋黃月餅函數(shù),代碼如下:

def cake2():

print('蛋黃月餅零售價8元')

【Python基礎知識】Python裝飾器函數(shù)概念

下面分別給禮盒函數(shù)傳遞三個原函數(shù)的名稱,修改禮盒函數(shù),代碼如下:

def box(fun): # 添加參數(shù)

print('禮盒加價160元')

def get_cake():

fun()

get_cake()

這樣就分別實現(xiàn)了三種打印效果,三種月餅都可以被禮盒包裝了。

重新調(diào)用禮盒函數(shù),代碼如下:

box(cake)

box(cake1)

box(cake2)

調(diào)用禮盒函數(shù)后,運行結(jié)果:

禮盒加價160元

五仁月餅零售價5元

禮盒加價160元

豆沙月餅零售價5元

禮盒加價160元

蛋黃月餅零售價8元

目前月餅函數(shù)是無參數(shù)、無返回值的。給月餅函數(shù)添加返回值,代表月餅的個數(shù),代碼如下:

def cake():

print('五仁月餅零售價5元')

return 4 # 添加返回值

而禮盒函數(shù)也需要進行相應的修改,代碼如下:

def box(fun):

print('禮盒加價160元')

def get_cake():

num = fun()

return num

return get_cake()

調(diào)用禮盒函數(shù),代碼如下:

nums = box(cake)

print('獲取數(shù)量:%d' % nums)

調(diào)用禮盒函數(shù)后,運行結(jié)果:

禮盒加價160元

五仁月餅零售價5元

獲取數(shù)量:4

目前原函數(shù)是cake(),其裝飾器函數(shù)是box()。Python中,原函數(shù)和裝飾器函數(shù)的修飾關(guān)系類似于月餅和禮盒的關(guān)系。在定義原函數(shù)之前,使用“@+裝飾器函數(shù)名”的形式得到裝飾關(guān)系。

給月餅函數(shù)添加修飾關(guān)系,代碼如下:

@box

def cake():

print('五仁月餅零售價5元')

return 4

而禮盒函數(shù)也需要進行相應的修改,代碼如下:

def box(fun):

print('禮盒加價160元')

def get_cake():

num = fun()

return num

return get_cake # 返回值中刪除函數(shù)名后的括號

在調(diào)用時不需要再寫禮盒函數(shù)名,就像最終吃的是月餅,因此,直接調(diào)用月餅函數(shù)即可,代碼如下:

nums = cake()

print('獲取數(shù)量:%d' % nums)

調(diào)用月餅函數(shù)后,運行結(jié)果:

禮盒加價160元

五仁月餅零售價5元

獲取數(shù)量:4

由運行結(jié)果可知,此時不需要寫修飾器函數(shù)名,也可達到同樣的效果,這說明了裝飾器的作用。

常見的函數(shù)一般是有參數(shù)的,裝飾器函數(shù)的參數(shù)用于接收原函數(shù)名,內(nèi)部函數(shù)的參數(shù)用于接收原函數(shù)的參數(shù)。有時原函數(shù)中參數(shù)的數(shù)量和類型是無法事先確定的,可以使用*args和**kwargs,即可變位置參數(shù)和可變關(guān)鍵字參數(shù),這樣無論任何參數(shù)都可以接收。

修改月餅函數(shù),添加參數(shù)n,代表月餅的個數(shù),代碼如下:

@box

def cake(n): # 添加參數(shù)

print('五仁月餅零售價5元')

return n # 修改返回值

而禮盒函數(shù)也需要進行相應的修改,代碼如下:

def box(fun):

print('禮盒加價160元')

def get_cake(*args, **kwargs): # 內(nèi)部函數(shù)添加參數(shù)

num = fun(*args, **kwargs)

return num

return get_cake

再次調(diào)用月餅函數(shù),代碼如下:

nums = cake(4)

print('獲取數(shù)量:%d' % nums)

再次調(diào)用月餅函數(shù)后,運行結(jié)果:

禮盒加價160元

五仁月餅零售價5元

獲取數(shù)量:4

文章“【Python基礎知識】Python裝飾器函數(shù)概念”已幫助

更多內(nèi)容

>>本文地址:http://www.jecan.cn/zhuanye/2021/69430.html

THE END  

聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

1 您的年齡

2 您的學歷

3 您更想做哪個方向的工作?

獲取測試結(jié)果
  • 大前端大前端
  • 大數(shù)據(jù)大數(shù)據(jù)
  • 互聯(lián)網(wǎng)營銷互聯(lián)網(wǎng)營銷
  • JavaJava
  • Linux云計算Linux
  • Python+人工智能Python
  • 嵌入式物聯(lián)網(wǎng)嵌入式
  • 全域電商運營全域電商運營
  • 軟件測試軟件測試
  • 室內(nèi)設計室內(nèi)設計
  • 平面設計平面設計
  • 電商設計電商設計
  • 網(wǎng)頁設計網(wǎng)頁設計
  • 全鏈路UI/UE設計UI設計
  • VR/AR游戲開發(fā)VR/AR
  • 網(wǎng)絡安全網(wǎng)絡安全
  • 新媒體與短視頻運營新媒體
  • 直播帶貨直播帶貨
  • 智能機器人軟件開發(fā)智能機器人
 

快速通道fast track

近期開班時間TIME

主站蜘蛛池模板: 防勒索软件_数据防泄密_Trellix(原McAfee)核心代理商_Trellix(原Fireeye)售后-广州文智信息科技有限公司 | 99文库_实习生实用的范文资料文库站 | 实体店商新零售|微赢|波后|波后合作|微赢集团 | 除尘器布袋骨架,除尘器滤袋,除尘器骨架,电磁脉冲阀膜片,卸灰阀,螺旋输送机-泊头市天润环保机械设备有限公司 | UV-1800紫外光度计-紫外可见光度计厂家-翱艺仪器(上海)有限公司 | 专业的新乡振动筛厂家-振动筛品质保障-环保振动筛价格—新乡市德科筛分机械有限公司 | 房车价格_依维柯/大通/东风御风/福特全顺/江铃图片_云梯搬家车厂家-程力专用汽车股份有限公司 | CTAB,表面活性剂1631溴型(十六烷基三甲基溴化铵)-上海升纬化工原料有限公司 | 冷却塔风机厂家_静音冷却塔风机_冷却塔电机维修更换维修-广东特菱节能空调设备有限公司 | 医学动画公司-制作3d医学动画视频-医疗医学演示动画制作-医学三维动画制作公司 | 隐形纱窗|防护纱窗|金刚网防盗纱窗|韦柏纱窗|上海青木装潢制品有限公司|纱窗国标起草单位 | 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 | 新疆系统集成_新疆系统集成公司_系统集成项目-新疆利成科技 | 不锈钢列管式冷凝器,换热器厂家-无锡飞尔诺环境工程有限公司 | 深圳激光打标机_激光打标机_激光焊接机_激光切割机_同体激光打标机-深圳市创想激光科技有限公司 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 在线PH计-氧化锆分析仪-在线浊度仪-在线溶氧仪- 无锡朝达 | 培训中心-海南香蕉蛋糕加盟店技术翰香原中心官网总部 | 气力输送设备_料封泵_仓泵_散装机_气化板_压力释放阀-河南锐驰机械设备有限公司 | 线材成型机,线材折弯机,线材成型机厂家,贝朗自动化设备有限公司1 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 杭州营业执照代办-公司变更价格-许可证办理流程_杭州福道财务管理咨询有限公司 | 集菌仪_智能集菌仪_全封闭集菌仪_无菌检查集菌仪厂家-那艾 | 煤棒机_增碳剂颗粒机_活性炭颗粒机_木炭粉成型机-巩义市老城振华机械厂 | 便携式高压氧舱-微压氧舱-核生化洗消系统-公众洗消站-洗消帐篷-北京利盟救援 | 西装定制/做厂家/公司_西装订做/制价格/费用-北京圣达信西装 | 合肥宠物店装修_合肥宠物美容院装修_合肥宠物医院设计装修公司-安徽盛世和居装饰 | 工装定制/做厂家/公司_工装订做/制价格/费用-北京圣达信工装 | 软启动器-上海能曼电气有限公司| 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 招商帮-一站式网络营销服务|互联网整合营销|网络推广代运营|信息流推广|招商帮企业招商好帮手|搜索营销推广|短视视频营销推广 | 国际船舶网 - 船厂、船舶、造船、船舶设备、航运及海洋工程等相关行业综合信息平台 | 锂电池生产厂家-电动自行车航模无人机锂电池定制-世豹新能源 | 壹作文_中小学生优秀满分作文大全 | 山东商品混凝土搅拌楼-环保型搅拌站-拌合站-分体仓-搅拌机厂家-天宇 | 包塑丝_高铁绑丝_地暖绑丝_涂塑丝_塑料皮铁丝_河北创筹金属丝网制品有限公司 | 凝胶成像系统(wb成像系统)百科-上海嘉鹏| 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 | 土壤养分检测仪|土壤水分|土壤紧实度测定仪|土壤墒情监测系统-土壤仪器网 | 西安烟道厂家_排气道厂家_包立管厂家「陕西西安」推荐西安天宇烟道 | AGV无人叉车_激光叉车AGV_仓储AGV小车_AGV无人搬运车-南昌IKV机器人有限公司[官网] |