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

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

Python 在函數上添加包裝器

瀏覽:66日期:2022-07-16 10:02:55

問題

你想在函數上添加一個包裝器,增加額外的操作處理(比如日志、計時等)。

解決方案

如果你想使用額外的代碼包裝一個函數,可以定義一個裝飾器函數,例如:

import timefrom functools import wrapsdef timethis(func): ’’’ Decorator that reports the execution time. ’’’ @wraps(func) def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) end = time.time() print(func.__name__, end-start) return result return wrapper

下面是使用裝飾器的例子:

>>> @timethis... def countdown(n):... ’’’... Counts down... ’’’... while n > 0:... n -= 1...>>> countdown(100000)countdown 0.008917808532714844>>> countdown(10000000)countdown 0.87188299392912>>>

討論

一個裝飾器就是一個函數,它接受一個函數作為參數并返回一個新的函數。當你像下面這樣寫:

@timethisdef countdown(n): pass

跟像下面這樣寫其實效果是一樣的:

def countdown(n): passcountdown = timethis(countdown)

順便說一下,內置的裝飾器比如 @staticmethod, @classmethod,@property 原理也是一樣的。例如,下面這兩個代碼片段是等價的:

class A: @classmethod def method(cls): passclass B: # Equivalent definition of a class method def method(cls): pass method = classmethod(method)

在上面的 wrapper() 函數中,裝飾器內部定義了一個使用 *args 和 **kwargs 來接受任意參數的函數。在這個函數里面調用了原始函數并將其結果返回,不過你還可以添加其他額外的代碼(比如計時)。然后這個新的函數包裝器被作為結果返回來代替原始函數。

需要強調的是裝飾器并不會修改原始函數的參數簽名以及返回值。使用 *args 和 **kwargs 目的就是確保任何參數都能適用。而返回結果值基本都是調用原始函數 func(*args, **kwargs) 的返回結果,其中func就是原始函數。

剛開始學習裝飾器的時候,會使用一些簡單的例子來說明,比如上面演示的這個。不過實際場景使用時,還是有一些細節問題要注意的。比如上面使用 @wraps(func) 注解是很重要的,它能保留原始函數的元數據(下一小節會講到),新手經常會忽略這個細節。接下來的幾個小節我們會更加深入的講解裝飾器函數的細節問題,如果你想構造你自己的裝飾器函數,需要認真看一下。

以上就是Python 在函數上添加包裝器的詳細內容,更多關于Python 添加包裝器的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 志高装潢官网-苏州老房旧房装修改造-二手房装修翻新 | 真空干燥烘箱_鼓风干燥箱 _高低温恒温恒湿试验箱_光照二氧化碳恒温培养箱-上海航佩仪器 | 沈阳网站建设_沈阳网站制作_沈阳网页设计-做网站就找示剑新零售 沈阳缠绕膜价格_沈阳拉伸膜厂家_沈阳缠绕膜厂家直销 | 变压器配件,变压器吸湿器,武强县吉口变压器配件有限公司 | Brotu | 关注AI,Web3.0,VR/AR,GPT,元宇宙区块链数字产业 | 杭州ROHS检测仪-XRF测试仪价格-百科 | 网站优化公司_北京网站优化_抖音短视频代运营_抖音关键词seo优化排名-通则达网络 | 钢结构-钢结构厂房-钢结构工程[江苏海逵钢构厂]| 高硼硅玻璃|水位计玻璃板|光学三棱镜-邯郸奥维玻璃科技有限公司 高温高压釜(氢化反应釜)百科 | 不锈钢搅拌罐_高速搅拌罐厂家-无锡市凡格德化工装备科技有限公司 | 制冷采购电子商务平台——制冷大市场| 安徽千住锡膏_安徽阿尔法锡膏锡条_安徽唯特偶锡膏_卡夫特胶水-芜湖荣亮电子科技有限公司 | 【直乐】河北石家庄脊柱侧弯医院_治疗椎间盘突出哪家医院好_骨科脊柱外科专业医院_治疗抽动症/关节病骨伤权威医院|排行-直乐矫形中医医院 | 耐腐蚀泵,耐腐蚀真空泵,玻璃钢真空泵-淄博华舜耐腐蚀真空泵有限公司 | 砂磨机_立式纳米砂磨机_实验室砂磨机-广州儒佳化工设备厂家 | BESWICK球阀,BESWICK接头,BURKERT膜片阀,美国SEL继电器-东莞市广联自动化科技有限公司 | 全屋整木定制-橱柜,家具定制-四川峨眉山龙马木业有限公司 | 多米诺-多米诺世界纪录团队-多米诺世界-多米诺团队培训-多米诺公关活动-多米诺创意广告-多米诺大型表演-多米诺专业赛事 | 江门流水线|江门工作台|江门市伟涛行工业设备有限公司 | 北京发电机出租_发电机租赁_北京发电机维修 - 河北腾伦发电机出租 | 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | 东莞市超赞电子科技有限公司 全系列直插/贴片铝电解电容,电解电容,电容器 | 沈阳楼承板_彩钢板_压型钢板厂家-辽宁中盛绿建钢品股份有限公司 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | 消泡剂_水处理消泡剂_切削液消泡剂_涂料消泡剂_有机硅消泡剂_广州中万新材料生产厂家 | CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 沈阳真空机_沈阳真空包装机_沈阳大米真空包装机-沈阳海鹞真空包装机械有限公司 | 防腐木批发价格_深圳_惠州_东莞防腐木厂家_森源(深圳)防腐木有限公司 | 临沂招聘网_人才市场_招聘信息_求职招聘找工作请认准【马头商标】 | 东莞动力锂电池保护板_BMS智能软件保护板_锂电池主动均衡保护板-东莞市倡芯电子科技有限公司 | 加气混凝土砌块设备,轻质砖设备,蒸养砖设备,新型墙体设备-河南省杜甫机械制造有限公司 | 水厂自动化-水厂控制系统-泵站自动化|控制系统-闸门自动化控制-济南华通中控科技有限公司 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 荣事达手推洗地机_洗地机厂家_驾驶式扫地机_工业清洁设备 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | CE认证_产品欧盟ROHS-REACH检测机构-商通检测| 生态板-实木生态板-生态板厂家-源木原作生态板品牌-深圳市方舟木业有限公司 | 急救箱-应急箱-急救包厂家-北京红立方医疗设备有限公司 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 碎石机设备-欧版反击破-欧版颚式破碎机(站)厂家_山东奥凯诺机械 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 谷梁科技|