当前位置:
首页 > Python基础教程 >
-
python基础教程之装饰器
第一种方法: 1 #加验证 2 def w1(Func): 3 def inner(): 4 print("正在验证权限") 5 Func() 6 return inner 7 def f1(): 8 print("...f1...") 9 def f2(): 10 print("...f2...") 11 f1= w1(f1) 12 f1()
1 #加验证 2 def w1(Func): 3 print("正在装饰") 4 def inner(): 5 print("正在验证权限") 6 Func() 7 return inner 8 #只要解释器执行到了这个代码,那么就会自动的进行装饰,而不是等到调用的时候才装饰的 9 @w1 10 def f1(): 11 print("...f1...") 12 #在调用f1之前,已经进行装饰了 13 f1()
使用装饰器对无参数的函数进行装饰
1 def func(functionName): 2 print("...func...1...") 3 def func_in(): 4 print("...func_in...1...") 5 functionName() 6 print("...func_in...2...") 7 print("...func...2...") 8 return func_in 9 @func 10 def test(): 11 print("...test...") 12 13 test()
使用装饰器对有参数的函数进行装饰
1 def func(functionName): 2 print("...func...1...") 3 def func_in(a,b):#如果a,b没有定义,会导致14行的调用失败 4 print("...func_in...1...") 5 functionName(a,b)#如果没有把a,b当做实参进行传递,会导致调用11行函数失败 6 print("...func_in...2...") 7 print("...func...2...") 8 return func_in 9 @func 10 def test(a,b): 11 print("...test-a=%d,b=%d..."%(a,b)) 12 13 test(11,22)
使用装饰器对不定长参数的函数进行装饰
1 def func(functionName): 2 print("...func...1...") 3 def func_in(*args,**kwargs):#如果a,b没有定义,会导致14行的调用失败 4 print("...func_in...1...") 5 functionName(*args,**kwargs)#如果没有把a,b当做实参进行传递,会导致调用11行函数失败 6 print("...func_in...2...") 7 print("...func...2...") 8 return func_in 9 print("...func...3...") 10 @func 11 def test(a,b,c): 12 print("...test-a=%d,b=%d,c=%d..."%(a,b,c)) 13 @func 14 def test2(a,b,c,d): 15 print("...test-a=%d,b=%d,c=%d,d=%d..."%(a,b,c,d)) 16 17 test(11,22,33) 18 test2(11,22,33,44)
装饰器对有返回值的函数进行装饰
1 def func(functionName): 2 print("...func...1...") 3 def func_in(): 4 print("...func_in...1...") 5 ret=functionName()#保存返回来的haha 6 print("...func_in...2...") 7 return ret#把haha返回到17行的调用 8 print("...func...2...") 9 return func_in 10 11 @func 12 def test(): 13 print("...test...") 14 return "haha" 15 16 17 ret=test() 18 print("test return value is %s"%ret)
通用装饰器
1 def func(functionName): 2 def func_in(*args,**kwargs): 3 print("记录日志") 4 ret=functionName(*args,**kwargs) 5 return ret 6 return func_in 7 8 @func 9 def test(): 10 print("...test...") 11 return "haha" 12 @func 13 def test2(): 14 print("...test2...") 15 @func 16 def test3(a): 17 print("...test3-a=%d..."%a) 18 19 ret=test() 20 print("test return value is %s"%ret) 21 22 a = test2() 23 print("test2 return value is %s"%a) 24 25 test3(11)
带有参数的装饰器
def func_arg(arg): def func(functionName): def func_in(): print("记录日志") functionName() return func_in return func #1.先执行func_arg("heihei")函数,这个函数的return 的结果是func这个函数的引用 #2.@func #3.使用func对test进行装饰 @func_arg("heihei")#相当于@func def test(): print("...test...") test()
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式