多语言展示
当前在线:480今日阅读:167今日分享:16

Python装饰器的使用

装饰器也是函数,只不过装饰器传的参数是要装饰的函数。相当于在要装饰的函数外层又包裹了一个函数。
工具/原料
1

Python3.6

2

Windows电脑

方法/步骤
1

打开Python IDLE,新建一个并保存test.py文件,在test.py中定义几个函数。代码如下:def fc1():    print ('fc1')def fc2():    print ('fc2')fc1()fc2()

2

运行程序可以看到函数fc1和fc2打印出来的内容,接着定义一个装饰器,完整test.py代码如下:def decor(fun):    def wrap():        print ('before')        fun()        print ('after')    return wrap@decordef fc1():    print ('fc1')def fc2():    print ('fc2')fc1()fc2()这段代码中decor函数就是装饰器,在fc1函数上方家@decor就是把这个装饰器作用在fc1函数上,fc1函数作为参数传入装饰器内,在decor函数中又通过wrap函数,在fc1函数前后都加了代码,把fc1函数包裹起来,这样执行时候就会按顺序wrap函数中的代码,fc1在中间部分执行。可以看到运行结果如下图

3

下面我们改造一下fc1函数,给fc1函数传递一个参数,这样作用于fc1函数的装饰器decor函数,也要做相应的更改,完整代码如下;def decor(fun):    def wrap(arg):        print ('before')        fun(arg)        print ('after')    return wrap@decordef fc1(arg):    print ('fc1',arg)def fc2():    print ('fc2')fc1('testarg')fc2()

4

fc1参数传入的位置就是是decor函数内部的wrap函数参数。运行程序,可以看到我们传入的参数被正常的打印出来了

6

运行程序可以看到结果正常打印,我们也可以在before和after函数中传递参数,这是它们的参数也要在装饰器的wrap中传递。

推荐信息