手把手教你使用python复杂一点点的装饰器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#只要@deco后面跟括号,都要 先传装饰器参数,返回 再传目标待装饰函数,返回 传目标函数的参数
#这个参数可以是类
def deco(arg):#装饰器的函数在这里传
    print('0',arg)
    def _deco(func):#装饰函数在这里传
        print('1',arg)
        def __deco():#装饰函数的参数在这里传
            print("所装饰函数 %s 调用前 [%s]." % (func.__name__, arg))
            func()
            print(" 所装饰函数 %s 调用后 [%s]." % (func.__name__, arg))
            return 1
        return __deco
    return _deco
 
#@deco表示调用 deco,
#且每当调用接下来定义的函数 myfunc,则为调用 deco 返回的函数 func
 
#与前面不同的地方在于,这里 @deco后面跟了(),是调用状态,
#所以会直接传参、调用deco,并调用 函数deco返回的函数_deco
#且每当调用接下来定义的函数 myfunc,则为
# 调用 传装饰器参数的deco所返回的 传所装饰函数的_deco所返回的__deco
@deco("装饰器参数")
def myfunc():
    print(" 这一句出来了证明函数 myfunc 调用了")
    return 'ok'#这里没用了,在deco中有用而已
 
'''
这里0 1都打印出来了
'''
 
@deco("装饰器参数er")
def myfunc2():
    print(" 这一句出来了证明函数 2 调用了")
 
myfunc()
print('\n') a =myfunc2()#1 返回的是deco返回的1
'''
装饰器呢,测试的时候,例如测试函数性能的时候经常用。
 写一些工具的时候,例如协服务程序的定时器的时候也经常用。
总之就有点类似 用在所写代码上的 一些工具
'''

  



作者:头条号 / 趣味Python
链接:http://toutiao.com/i6313766939822916098/
来源:头条号(今日头条旗下创作平台)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2016-08-02 17:20  PythonChan  阅读(725)  评论(1)    收藏  举报
编辑推荐:
· tomcat为什么假死了
· 聊一聊 Linux 上对函数进行 hook 的两种方式
· C# 锁机制全景与高效实践:从 Monitor 到 .NET 9 全新 Lock
· 一则复杂 SQL 改写后有感
· golang中写个字符串遍历谁不会?且看我如何提升 50 倍
阅读排行:
· 完成微博外链备案,微博中直接可以打开园子的链接
· 推荐 3 种 .NET Windows 桌面应用程序自动更新解决方案
· .NET 10 支持Linux/Unix 的Shebang(Hashbang)
· 一个基于 .NET 开源、模块化 AI 图像生成 Web 用户界面
· 上周热点回顾(6.9-6.15)
点击右上角即可分享
微信分享提示