Python装饰器的使用

2025-07-18 16:15:20

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

Python装饰器的使用

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在中间部分执行。可以看到运行结果如下图

Python装饰器的使用

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函数参数。运行程序,可以看到我们传入的参数被正常的打印出来了

Python装饰器的使用

5、再高级一点的装饰器,在decor函数外再包一层outter函数,同时传入两个函数作为参数,这迷撞笸痉两个函数分别在fc1函数的前后执行。具体代码如下,注意这是装饰器为outter,并且要传入两个函数参数。def outter(before,after): def decor(fun): def wrap(arg): before() fun(arg) after() return wrap return decordef before(): print ('new before')def after(): print ('new after')@outter(before,after)def fc1(arg): print ('fc1',arg)def fc2(): print ('fc2')fc1('testarg')fc2()

Python装饰器的使用

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

Python装饰器的使用
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢