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

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

Python閉包裝飾器使用方法匯總

瀏覽:100日期:2022-07-19 11:22:11

閉包內容:

匿名函數:能夠完成簡單的功能,傳遞這個函數的引用,只有功能

普通函數:能夠完成復雜的功能,傳遞這個函數的引用,只有功能

閉包:能夠完成較為復雜的功能,傳遞這個閉包中的函數以及數據,因此傳遞是功能+數據

對象:能夠完成最復雜的功能,傳遞很多數據+很多功能,因此傳遞的是數據+功能

———————————————————

對全局函數進行修改:在函數當中加global,在閉包中外邊中的變量加nonlocal

閉包定義:有兩個函數嵌套使用,里面的函數可以使用外面函數所傳輸的參數,最后可傳遞的是里面函數的結構與數據(個人理解)。

最后閉包可以在python中引申出裝飾器 ———————————————————

def closure(): # 在函數內部再定義一個函數, # 并且這個函數用到了外邊函數的變量,那么將這個函數以及用到的一些變量稱之為閉包 def closure_in(x): print(’---------我是打不死的%s--------’ %x) return closure_in​x = closure()x(’小強’)​print(’*’*20)# -----加餐---------def closure_1(a,b,c): def closure_on(x): print(’-----%s加餐-------’ %b) print(a*x + c) return closure_on​demo = closure_1(2,’小強’,3) #傳closure_1函數demo(4) #傳clsure_on函數​#注:函數不加括號,調用的是函數本身【function】;函數加括號,調用的是函數的return結果。

裝飾器內容:

代碼要遵守‘開放封閉’原則;對已經寫好的函數遵守封閉,對功能擴展遵守開放;

# 裝飾器的作用:為了對原來的代碼上進行擴展def decoration(func): def call_func(): print(’-------正在裝飾 -------’ ) func() return call_func​#@decoration #--->demo_new = decoration(demo)def demo(): print(’demo----’)​demo_new = decoration(demo)demo_new()

使用裝飾器來測試一個函數的運行時:

import timedef set_func(func): def call_func(): start_time = time.time() func() stop_func = time.time() print(‘alltimes is %f’ %(stop_func-start_fun)) return call_func@set_funcdef test1(): print(‘——-test1———’)test1()​#等價于:@set_func==test1 = set_func(test1)

1. 沒有參數,沒有返回值的函數進行裝飾:

def set_func(func): def call_func(): print(‘———test2——-’) print(‘———-test3——’) func() return call_func@set_funcdef test1(): print(‘——test1——- ’)

2. 對有參數無返回值的函數進行裝飾:

def set_func(func): def call_func(a): #變 print(‘———test2——-’) print(‘———-test3——’) func(a) #變 return call_func@set_funcdef test1(num): print(‘——test1——- %d ’ %num)​test1(100) —->call_func(100)test1(200)——>call_func(200)

復現裝飾器原理:

————————————————————————-

只要遇到@函數 裝飾器(這句話),在程序中就已經執行了!!

3. 不定長參數的函數裝飾:

def set_func(func): def call_func(*args,**kwargs): #變 print(‘———test2——-’) print(‘———-test3——’) func(*args,**kwargs) #(拆包)將元祖拆開,每個進行傳輸; #func(args,kwargs)—>不行,相當于傳遞了兩個參數:一個元祖,一個字典。 return call_func@set_funcdef test1(num,*args,**kwargs): print(‘——test1——- %d ’ %num) print(‘——test1——- ’ , args) print(‘——test1——- ’ ,kwargs )test1(100)test1(100,200)test1(100,200,300,mm=100)

注意:*args保存不定長參數,以元祖保存,**kwargs保存字典形式(mm=...)

4.對應的返回值參數進行裝飾、通用裝飾器:

#通用裝飾器def set_func(func): print(“開始進行裝飾———-”) def call_func(*args,**kwargs): #變 print(‘———test2——-’) print(‘———-test3——’) return func(*args,**kwargs) #(拆包)將元祖拆開,每個進行傳輸;如果沒有return ret返回none。 #func(args,kwargs)—>不行,相當于傳遞了兩個參數:一個元祖,一個字典。 return call_func@set_funcdef test1(num,*args,**kwargs): print(‘——test1——- %d ’ %num) print(‘——test1——- ’ , args) print(‘——test1——- ’ ,kwargs ) return ‘ok’ #—-返回給上面的func(),然后return func—retret = test1(100)

5. 多個裝飾器對同一個函數進行裝飾:

def add_qx(func): print(“——開始進行裝飾權限1———-”) def call_func(*args,**kwargs): #變 print(‘這是權限驗證1’) return func(*args,**kwargs) return call_func​def add_xx(func): print(“——開始進行裝飾xx功能———-”) def call_func(*args,**kwargs): #變 print(‘這是xx權限驗證’) return func(*args,**kwargs) return call_func@add_qx@add_xxdef test1(): print(‘——test1——-’)test1()

首先執行第一個,但是第一個裝飾器下面不是函數(裝飾器原則:下面必須是函數,否則不執行),所以第一個函數先等待,等第二個裝飾器執行后形成函數在交給第一個裝飾器;所以運行結果是:

開始進行裝飾xx的功能,

開始進行裝飾權限1,

這是權限驗證1,

這是xx權限驗證,

——-test1——-,

——————裝飾器練習—————- 輸出格式:<td><h1>haha</h1></td>

def set_func_1(func): def call_func(): return ‘<h1>’ + func() + ’</h1>’ return call_func​def set_func_2(func): def call_func(): return ‘<td>’ + func() + ’</td>’ return call_func@set_func_1()@set_func_2()def get_str(): return ‘haha’print(get_str())最后執行的效果: <h1><td>haha</td></h1>

6. 用類對函數進行裝飾(了解):

class Test(object): def __init__(self,func): self.func = fun def __call__(self): print(‘這里是裝飾器的功能。。。。’) return self.func()@Testdef get_str(): return ‘haha’print(get_str())

以上就是裝飾器與閉包的全部內容

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 网站建设_网站制作_SEO优化推广_百度推广开户_朋友圈网络科技 | 热处理炉-退火炉-回火炉设备厂家-丹阳市电炉厂有限公司 | TMT观察网_独特视角观察TMT行业| 仓储货架_南京货架_钢制托盘_仓储笼_隔离网_环球零件盒_诺力液压车_货架-南京一品仓储设备制造公司 | 一点车讯-汽车网站,每天一点最新车讯!| 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 诚暄电子公司首页-线路板打样,pcb线路板打样加工制作厂家 | 传递窗_超净|洁净工作台_高效过滤器-传递窗厂家广州梓净公司 | 隔离变压器-伺服变压器--输入输出电抗器-深圳市德而沃电气有限公司 | 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 | 高压包-点火器-高压发生器-点火变压器-江苏天网 | 泥浆在线密度计厂家-防爆数字压力表-膜盒-远传压力表厂家-江苏大亚自控设备有限公司 | 西宁装修_西宁装修公司-西宁业之峰装饰-青海业之峰墅级装饰设计公司【官网】 | 24位ADC|8位MCU-芯易德科技有限公司| 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 实验室pH计|电导率仪|溶解氧测定仪|离子浓度计|多参数水质分析仪|pH电极-上海般特仪器有限公司 | 电梯装饰-北京万达中意电梯装饰有限公司| 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 100国际学校招生 - 专业国际学校择校升学规划 | 铝合金脚手架厂家-专注高空作业平台-深圳腾达安全科技 | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 槽钢冲孔机,槽钢三面冲,带钢冲孔机-山东兴田阳光智能装备股份有限公司 | 自动化展_机器人展_机床展_工业互联网展_广东佛山工博会 | 德州万泰装饰 - 万泰装饰装修设计软装家居馆 | 应急灯_消防应急灯_应急照明灯_应急灯厂家-大成智慧官网 | 超声波_清洗机_超声波清洗机专业生产厂家-深圳市好顺超声设备有限公司 | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | SDI车窗夹力测试仪-KEMKRAFT方向盘测试仪-上海爱泽工业设备有限公司 | 大型冰雕-景区冰雕展制作公司,3D创意设计源头厂家-[赛北冰雕] | 液压油缸-液压站生产厂家-洛阳泰诺液压科技有限公司 | 压片机_高速_单冲_双层_花篮式_多功能旋转压片机-上海天九压片机厂家 | 诺冠气动元件,诺冠电磁阀,海隆防爆阀,norgren气缸-山东锦隆自动化科技有限公司 | 合肥卓创建筑装饰,专业办公室装饰、商业空间装修与设计。 | 环比机械| 云南外加剂,云南速凝剂,云南外加剂代加工-普洱澜湄新材料科技有限公司 | 泰国专线_泰国物流专线_广州到泰国物流公司-泰廊曼国际 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 昆明挖掘机修理厂_挖掘机翻新再制造-昆明聚力工程机械维修有限公司 | 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | WTB5光栅尺-JIE WILL磁栅尺-B60数显表-常州中崴机电科技有限公司 |