实战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://m.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

主站蜘蛛池模板: 沉降天平_沉降粒度仪_液体比重仪-上海方瑞仪器有限公司 | 不锈钢复合板厂家_钛钢复合板批发_铜铝复合板供应-威海泓方金属复合材料股份有限公司 | 派克防爆伺服电机品牌|国产防爆伺服电机|高低温伺服电机|杭州摩森机电科技有限公司 | 真空泵厂家_真空泵机组_水环泵_旋片泵_罗茨泵_耐腐蚀防爆_中德制泵 | 真石漆,山东真石漆,真石漆厂家,真石漆价格-山东新佳涂料有限公司 | 金属抛光机-磁悬浮抛光机-磁力研磨机-磁力清洗机 - 苏州冠古科技 | 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | 智慧消防-消防物联网系统云平台 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 行业分析:提及郑州火车站附近真有 特殊按摩 ?2025实地踩坑指南 新手如何避坑不踩雷 | 头条搜索极速版下载安装免费新版,头条搜索极速版邀请码怎么填写? - 欧远全 | 诚暄电子公司首页-线路板打样,pcb线路板打样加工制作厂家 | 烟台游艇培训,威海游艇培训-烟台市邮轮游艇行业协会 | 汽液过滤网厂家_安平县银锐丝网有限公司| 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 阿米巴企业经营-阿米巴咨询管理-阿米巴企业培训-广东键锋企业管理咨询有限公司 | 电线电缆厂家|沈阳电缆厂|电线厂|沈阳英联塑力线缆有限公司 | 门禁卡_智能IC卡_滴胶卡制作_硅胶腕带-卡立方rfid定制厂家 | 穿线管|波纹穿线管|包塑金属软管|蛇皮管?闵彬专注弱电工程? | 浙江上沪阀门有限公司| 奶茶加盟,奶茶加盟店连锁品牌-甜啦啦官网 | 国际金融网_每日财经新资讯网| 北京四合院出租,北京四合院出售,北京平房买卖 - 顺益兴四合院 | 地图标注|微信高德百度地图标注|地图标记-做地图[ZuoMap.com] | 数码听觉统合训练系统-儿童感觉-早期言语评估与训练系统-北京鑫泰盛世科技发展有限公司 | 网带通过式抛丸机,,网带式打砂机,吊钩式,抛丸机,中山抛丸机生产厂家,江门抛丸机,佛山吊钩式,东莞抛丸机,中山市泰达自动化设备有限公司 | 二手回收公司_销毁处理公司_设备回收公司-找回收信息网 | BHK汞灯-百科|上海熙浩实业有限公司 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | 电液推杆生产厂家|电动推杆|液压推杆-扬州唯升机械有限公司 | 无痕胶_可移胶_无痕双面胶带_可移无痕胶厂家-东莞凯峰 | 上海洗地机-洗地机厂家-全自动洗地机-手推式洗地机-上海滢皓洗地机 | 无硅导热垫片-碳纤维导热垫片-导热相变材料厂家-东莞市盛元新材料科技有限公司 | 滑板场地施工_极限运动场地设计_滑板公园建造_盐城天人极限运动场地建设有限公司 | 气动隔膜泵-电动隔膜泵-循环热水泵-液下排污/螺杆/管道/化工泵「厂家」浙江绿邦 | 深圳标识制作公司-标识标牌厂家-深圳广告标识制作-玟璟广告-深圳市玟璟广告有限公司 | 原色会计-合肥注册公司_合肥代理记账公司_营业执照代办 | CE认证_产品欧盟ROHS-REACH检测机构-商通检测 | 生物制药洁净车间-GMP车间净化工程-食品净化厂房-杭州波涛净化设备工程有限公司 | 湖南教师资格网-湖南教师资格证考试网| 江苏远邦专注皮带秤,高精度皮带秤,电子皮带秤研发生产 | 高速混合机_锂电混合机_VC高效混合机-无锡鑫海干燥粉体设备有限公司 |