电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python裝飾器三種裝飾模式的簡單分析

瀏覽:14日期:2022-07-12 11:23:55

學設計模式中有個裝飾模式,用java實現(xiàn)起來不是很難,但是遠遠沒有python簡單,難怪越來越火了!

這里就簡單討論下python的幾種裝飾模式:

一 無參裝飾器:

# 裝飾器import time # 裝飾器,記錄函數(shù)運行時間def decorator01(fun): def wapper(): stime = time.time() fun() etime = time.time() print('fun run time is {TIME}'.format(TIME=etime - stime)) return wapper # 必須要返回一個函數(shù)的內存地址 # 使用裝飾器裝飾某個函數(shù),等價于 test01=decorator01(test01),# 即將test01實際引用變成wapper函數(shù)內存地址,所以執(zhí)行test01實際是執(zhí)行wapper@decorator01def test01(): time.sleep(2) print('test01 is running') test01() # 不修改代碼和調用方式,實現(xiàn)添加記錄時間功能

二 函數(shù)帶參裝飾器:

# 裝飾器import time # 裝飾器,記錄函數(shù)運行時間def decorator01(fun): def wapper(*args, **kwargs): # 使用非固定參數(shù),無論參數(shù)是什么,都可以傳遞進來 stime = time.time() fun(*args, **kwargs) etime = time.time() print('fun run time is {TIME}'.format(TIME=etime - stime)) return wapper # 必須要返回一個函數(shù)的內存地址 # test01() = wapper(), 所以裝飾器加參數(shù)是給嵌套函數(shù)加參數(shù)@decorator01def test01(args1): time.sleep(2) print('參數(shù)是 {NAME} '.format(NAME=args1)) test01('侯征') # 不修改代碼和調用方式,實現(xiàn)添加記錄時間功能

三 裝飾器本身帶參數(shù)的裝飾器:

# 裝飾器import time # 如果裝飾器有參數(shù),最外層是裝飾器的參數(shù)def decorator01(*args, **kwargs): print('裝飾器參數(shù):', *args, **kwargs) def out(fun): #第二層才是接受的函數(shù) def wapper(*args, **kwargs): # 使用非固定參數(shù),無論參數(shù)是什么,都可以傳遞進來 stime = time.time() fun(*args, **kwargs) etime = time.time() print('fun run time is {TIME}'.format(TIME=etime - stime)) return wapper # 必須要返回一個函數(shù)的內存地址 return out # 要返回裝飾函數(shù)的內存地址 # 裝飾器本身帶參數(shù),此時 decorator01(arg)=out,即相當于 @out裝飾test01,所以 test01=out(fun)=wapper@decorator01(1)def test01(args1): time.sleep(2) print('參數(shù)是 {NAME} '.format(NAME=args1)) test01('侯征') # 不修改代碼和調用方式,實現(xiàn)添加記錄時間功能

這種一開始挺難理解的,但是只要記住一點,@語法糖裝飾器的作用就是 給被裝飾的函數(shù)重新賦一個函數(shù)的內存地址,即裝飾器內部定義的那個

和你直接fun01=decorator(fun),然后 fun01()是一樣的,只是這樣寫不用改變原來調用方式

@decorator

def fun():

即就是 fun=decorator(fun) 所以,當裝飾器有參數(shù)時,還需要返回一個函數(shù),這個函數(shù)才是用來裝飾作用的, decorator(1)=out, 即 fun=out(fun) !!

所以外面再包一層就行了,其實就相當于@decorator(1)=@out,即 decorator(1)=out ,實際裝飾器時out,只不過decorator(1)返回了一個out 這樣理解就簡單多了 ,無參的@就是起賦值作用

以上就是python裝飾器三種裝飾模式的簡單分析的詳細內容,更多關于python 裝飾模式的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 单螺旋速冻机-双螺旋-流态化-隧道式-食品速冻机厂家-广州冰泉制冷 | 上海办公室装修_上海店铺装修公司_厂房装潢设计_办公室装修 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 桁架机器人_桁架机械手_上下料机械手_数控车床机械手-苏州清智科技装备制造有限公司 | 爱德华真空泵油/罗茨泵维修,爱发科-比其尔产品供应东莞/杭州/上海等全国各地 | 硅PU球场、篮球场地面施工「水性、环保、弹性」硅PU材料生产厂家-广东中星体育公司 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 高扬程排污泵_隔膜泵_磁力泵_节能自吸离心水泵厂家-【上海博洋】 | 蓄电池在线监测系统|SF6在线监控泄露报警系统-武汉中电通电力设备有限公司 | 祝融环境-地源热泵多恒系统高新技术企业,舒适生活环境缔造者! | 自动螺旋上料机厂家价格-斗式提升机定制-螺杆绞龙输送机-杰凯上料机 | 吹田功率计-长创耐压测试仪-深圳市新朗普电子科技有限公司 | 大巴租车平台承接包车,通勤班车,巴士租赁业务 - 鸿鸣巴士 | 众品地板网-地板品牌招商_地板装修设计_地板门户的首选网络媒体。 | 包装机传感器-搅拌站传感器-山东称重传感器厂家-济南泰钦电气 | 智能交通网_智能交通系统_ITS_交通监控_卫星导航_智能交通行业 | 浙江建筑资质代办_二级房建_市政_电力_安许_劳务资质办理公司 | 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 深圳公司注册-工商注册代理-注册公司流程和费用_护航财税 | 工业PH计|工业ph酸度计|在线PH计价格-合肥卓尔仪器仪表有限公司 济南画室培训-美术高考培训-山东艺霖艺术培训画室 | 短信通106短信接口验证码接口群发平台_国际短信接口验证码接口群发平台-速度网络有限公司 | 软瓷_柔性面砖_软瓷砖_柔性石材_MCM软瓷厂家_湖北博悦佳软瓷 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 三价铬_环保铬_环保电镀_东莞共盈新材料贸易有限公司 | 武汉高温老化房,恒温恒湿试验箱,冷热冲击试验箱-武汉安德信检测设备有限公司 | 齿轮减速机电机一体机_齿轮减速箱加电机一体化-德国BOSERL蜗轮蜗杆减速机电机生产厂家 | 泰安塞纳春天装饰公司【网站】| 橡胶接头_橡胶软接头_套管伸缩器_管道伸缩器厂家-巩义市远大供水材料有限公司 | 护栏打桩机-打桩机厂家-恒新重工| 扒渣机厂家_扒渣机价格_矿用扒渣机_铣挖机_撬毛台车_襄阳永力通扒渣机公司 | 超声波焊接机_超音波熔接机_超声波塑焊机十大品牌_塑料超声波焊接设备厂家 | LCD3D打印机|教育|桌面|光固化|FDM3D打印机|3D打印设备-广州造维科技有限公司 | MOOG伺服阀维修,ATOS比例流量阀维修,伺服阀维修-上海纽顿液压设备有限公司 | 章丘丰源机械有限公司 - 三叶罗茨风机,罗茨鼓风机,罗茨风机 | 1000帧高速摄像机|工业高速相机厂家|科天健光电技术 | 高楼航空障碍灯厂家哪家好_航空障碍灯厂家_广州北斗星障碍灯有限公司 | 锻造液压机,粉末冶金,拉伸,坩埚成型液压机定制生产厂家-山东威力重工官方网站 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | elisa试剂盒-PCR试剂盒「上海谷研实业有限公司」 | 实木家具_实木家具定制_全屋定制_美式家具_圣蒂斯堡官网 |