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

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

如何真正的了解python裝飾器

瀏覽:2日期:2022-07-14 10:05:59

合理使用裝飾器可以簡化開發,并且使得代碼更加清晰。下面我們分別介紹兩種裝飾器,不帶參數的裝飾器和帶參數的裝飾器。

一、不帶參數的裝飾器

我們用一個實際的例子來引入裝飾器的概念,比如我們現在有一個方法A(),然后我們需要在方法A()執行之前在終端打印'function is running',這時候我們可以在方法A()的開始部分加上下面的代碼:

print('function is running')

但是如果我們不想修改方法A()的代碼,也可以重新寫一個方法decorator(),然后把A()作為入參,代碼如下:

def decorator(fun): @functools.wraps(fun) def wrapper(*args, **kwargs):print('Method is running')return fun() return wrapper

python中的方法可以作為參數傳入另一個方法,所以當我們執行decorator(A)的時候,返回的是一個方法,這個方法的本質是先執行print語句,然后再執行A()。

但是這樣我們的調用代碼就需要進行修改,也就是說之前調用方法A(),現在的寫法是調用decorator(A)(),為了不影響調用的代碼,我們使用python的語法糖改造方法A()的代碼。

@decoratordef A(): # do something

實際上只是在A()的前面加上一行@decorator,這樣在我們的調用代碼就不需要改變了。

裝飾器中的@functools.wraps(fun)是為了保證返回的方法__name__屬性和入參方法fun的__name__屬性相同。

二、帶入參的裝飾器

在上面不帶參數的裝飾器中,我們實現了在執行方法A()之前打印一行固定的字符串,如果我們想要打印不同的字符串就需要用帶參數的裝飾器。實際上就是在不帶參數的裝飾器上再封裝一層即可,代碼如下:

def decorator_par(name): def decorator(fun):@functools.wraps(fun)def wrapper(*args, **kwargs): print('Method {} is running'.format(name)) return fun()return wrapper return decorator

這樣我們就可以在使用裝飾器的時候設置參數name,實現打印不同的信息。完整的代碼如下:

import functools def decorator_par(name): def decorator(fun):@functools.wraps(fun)def wrapper(*args, **kwargs): print('Method {} is running'.format(name)) return fun()return wrapper return decorator @decorator_par('A')def A(): print('I am A') @decorator_par('B')def B(): print('I am B') A()B()

執行輸出為:

Method A is runningI am AMethod B is runningI am B

可以看到我們在不改變方法調用代碼的情況下,實現了在該方法之前打印特定的信息。

以上就是裝飾器的兩種實現示例,實際開發中也可以將多個裝飾器進行嵌套,可以實現更加復雜的需求。

內容擴展:

python函數式編程之裝飾器

1.開放封閉原則

簡單來說,就是對擴展開放,對修改封閉。

在面向對象的編程方式中,經常會定義各種函數。一個函數的使用分為定義階段和使用階段,一個函數定義完成以后,可能會在很多位置被調用。這意味著如果函數的定義階段代碼被修改,受到影響的地方就會有很多,此時很容易因為一個小地方的修改而影響整套系統的崩潰,所以對于現代程序開發行業來說,一套系統一旦上線,系統的源代碼就一定不能夠再改動了。然而一套系統上線以后,隨著用戶數量的不斷增加,一定會為一套系統擴展添加新的功能。

此時,又不能修改原有系統的源代碼,又要為原有系統開發增加新功能,這就是程序開發行業的開放封閉原則,這時就要用到裝飾器了。

2.什么是裝飾器

裝飾器,顧名思義,就是裝飾,修飾別的對象的一種工具。

所以裝飾器可以是任意可調用的對象,被裝飾的對象也可以是任意可調用對象。

3.裝飾器的作用

在不修改被裝飾對象的源代碼以及調用方式的前提下為被裝飾對象添加新功能。

以上就是如何真正的了解python裝飾器的詳細內容,更多關于你真的了解python裝飾器么的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 微水泥_硅藻泥_艺术涂料_艺术漆_艺术漆加盟-青岛泥之韵环保壁材 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 早报网| 深圳市宏康仪器科技有限公司-模拟高空低压试验箱-高温防爆试验箱-温控短路试验箱【官网】 | 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 哲力实业_专注汽车涂料汽车漆研发生产_汽车漆|修补油漆品牌厂家 长沙一级消防工程公司_智能化弱电_机电安装_亮化工程专业施工承包_湖南公共安全工程有限公司 | 巩义市科瑞仪器有限公司| 创富网-B2B网站|供求信息网|b2b平台|专业电子商务网站 | 臭氧实验装置_实验室臭氧发生器-北京同林臭氧装置网 | 诸城网站建设-网络推广-网站优化-阿里巴巴托管-诸城恒泰互联 | CCE素质教育博览会 | CCE素博会 | 教育展 | 美育展 | 科教展 | 素质教育展 | 高压互感器,电流互感器,电压互感器-上海鄂互电气科技有限公司 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 吲哚菁绿衍生物-酶底物法大肠菌群检测试剂-北京和信同通科技发展有限公司 | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 奥运星-汽车性能网评-提供个性化汽车资讯 | 辐射仪|辐射检测仪|辐射巡测仪|个人剂量报警仪|表面污染检测仪|辐射报警仪|辐射防护网 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 步入式高低温测试箱|海向仪器 | 药品/药物稳定性试验考察箱-埃里森仪器设备(上海)有限公司 | 酒吧霸屏软件_酒吧霸屏系统,酒吧微上墙,夜场霸屏软件,酒吧点歌软件,酒吧互动游戏,酒吧大屏幕软件系统下载 | 电动手术床,医用护理床,led手术无影灯-曲阜明辉医疗设备有限公司 | 开云(中国)Kaiyun·官方网站-登录入口 | 压滤机-洗沙泥浆处理-压泥机-山东创新华一环境工程有限公司 | 章丘丰源机械有限公司 - 三叶罗茨风机,罗茨鼓风机,罗茨风机 | 采暖炉_取暖炉_生物质颗粒锅炉_颗粒壁炉_厂家加盟批发_烟台蓝澳采暖设备有限公司 | 湖南自考_湖南自学考试 | 电池挤压试验机-自行车喷淋-车辆碾压试验装置-深圳德迈盛测控设备有限公司 | 臻知网大型互动问答社区-你的问题将在这里得到解答!-无锡据风网络科技有限公司 | 断桥铝破碎机_发动机破碎机_杂铝破碎机厂家价格-皓星机械 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 专注氟塑料泵_衬氟泵_磁力泵_卧龙泵阀_化工泵专业品牌 - 梭川泵阀 | TYPE-C厂家|TYPE-C接口|TYPE-C防水母座|TYPE-C贴片-深圳步步精 | 质构仪_鱼糜弹性仪-上海腾拔仪器科技有限公司 | 无轨电动平车_轨道平车_蓄电池电动平车★尽在新乡百特智能转运设备有限公司 | 压片机_高速_单冲_双层_花篮式_多功能旋转压片机-上海天九压片机厂家 | 钢制拖链生产厂家-全封闭钢制拖链-能源钢铝拖链-工程塑料拖链-河北汉洋机械制造有限公司 | 注塑机-压铸机-塑料注塑机-卧式注塑机-高速注塑机-单缸注塑机厂家-广东联升精密智能装备科技有限公司 | 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 | 远程会诊系统-手术示教系统【林之硕】医院远程医疗平台 | 天助网 - 中小企业全网推广平台_生态整合营销知名服务商_天助网采购优选 | 闸阀_截止阀_止回阀「生产厂家」-上海卡比阀门有限公司 |