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

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

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

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

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

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

一 無參裝飾器:

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

二 函數帶參裝飾器:

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

三 裝飾器本身帶參數的裝飾器:

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

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

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

@decorator

def fun():

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

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

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

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 网站建设_网站制作_SEO优化推广_百度推广开户_朋友圈网络科技 | 成都热收缩包装机_袖口式膜包机_高速塑封机价格_全自动封切机器_大型套膜机厂家 | 手表腕表维修保养鉴定售后服务中心网点 - 名表维修保养 | 大立教育官网-一级建造师培训-二级建造师培训-造价工程师-安全工程师-监理工程师考试培训 | 青海电动密集架_智能密集架_密集架价格-盛隆柜业青海档案密集架厂家 | 万家财经_财经新闻_在线财经资讯网 | 单机除尘器 骨架-脉冲除尘器设备生产厂家-润天环保设备 | 齿辊分级破碎机,高低压压球机,立式双动力磨粉机-郑州长城冶金设备有限公司 | 厦门网站建设_厦门网站设计_小程序开发_网站制作公司【麦格科技】 | 120kv/2mA直流高压发生器-60kv/2mA-30kva/50kv工频耐压试验装置-旭明电工 | 成都装修公司-成都装修设计公司推荐-成都朗煜装饰公司 | 进口消泡剂-道康宁消泡剂-陶氏消泡剂-大洋消泡剂 | 阻垢剂-反渗透缓蚀阻垢剂厂家-山东鲁东环保科技有限公司 | 神超官网_焊接圆锯片_高速钢锯片_硬质合金锯片_浙江神超锯业制造有限公司 | 陕西华春网络科技股份有限公司 | 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | SMC-ASCO-CKD气缸-FESTO-MAC电磁阀-上海天筹自动化设备官网 | 全自动定氮仪-半自动凯氏定氮仪厂家-祎鸿仪器 | 陶瓷加热器,履带式加热器-吴江市兴达电热设备厂 | 泥浆在线密度计厂家-防爆数字压力表-膜盒-远传压力表厂家-江苏大亚自控设备有限公司 | 冷热冲击试验箱_温度冲击试验箱价格_冷热冲击箱排名_林频厂家 | 361°官方网站 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 硬度计,金相磨抛机_厂家-莱州华煜众信试验仪器有限公司 | 【法利莱住人集装箱厂家】—活动集装箱房,集装箱租赁_大品牌,更放心 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 办公室家具公司_办公家具品牌厂家_森拉堡办公家具【官网】 | 脉冲除尘器,除尘器厂家-淄博机械 | 天空彩票天下彩,天空彩天空彩票免费资料,天空彩票与你同行开奖,天下彩正版资料大全 | 天津力值检测-天津管道检测-天津天诚工程检测技术有限公司 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 | 颚式破碎机,圆锥破碎机,制砂机-新乡市德诚机电制造有限公司 | 广州企亚 - 数码直喷、白墨印花、源头厂家、透气无手感方案服务商! | 低压载波电能表-单相导轨式电能表-华邦电力科技股份有限公司-智能物联网综合管理平台 | 山东钢格板|栅格板生产厂家供应商-日照森亿钢格板有限公司 | 航空障碍灯_高中低光强航空障碍灯_民航许可认证航空警示灯厂家-东莞市天翔航天科技有限公司 | 包塑丝_高铁绑丝_地暖绑丝_涂塑丝_塑料皮铁丝_河北创筹金属丝网制品有限公司 | 不发火防静电金属骨料_无机磨石_水泥自流平_修补砂浆厂家「圣威特」 | 清水混凝土修复_混凝土色差修复剂_混凝土色差调整剂_清水混凝土色差修复_河南天工 | 胃口福饺子加盟官网_新鲜现包饺子云吞加盟 - 【胃口福唯一官网】 |