亲宝软件园·资讯

展开

Python学习笔记--装饰器的实验

flyinghappy 人气:0

装饰器既然可以增加原来函数的功能,那能不能改变传给原函数的参数呢?

我们实验一下,先上代码:

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 # @Date    : 2020-03-03 20:26:44
 4 # @Author  : Flyinghappy (671474@qq.com)
 5 # @Link    : https://www.cnblogs.com/flyinghappy/
 6 # @Version : $Id$
 7 import time
 8 '''
 9 装饰器的实验:
10 看看装饰器能否接收内部函数的参数,然后改变参数值,然后看会发生什么
11 '''
12 def decorator_funtion(func):
13     def inner(*args,**kwargs):
14         print('原函数执行前!')
15         args=['改变打印内容:呵呵呵']
16         kwargs={'name':'flyinghappy','age':40}
17         result=func(*args,**kwargs)
18         print('原函数执行后!')
19         return result
20     return inner
21 @decorator_funtion
22 def function(*args,**kwargs):
23     '''最原始的函数'''
24     print('本函数的任务是打印:',args,kwargs)
25     time.sleep(2)
26 
27 if __name__ == '__main__':
28     function('我是原始函数!')

看看测试结果:

 

 从测试结果看,我们写在装饰器函数里面修改传给原函数func的参数args,kwargs都被我们修改了。

也就是我们传给funtion的参数是‘我是原始函数’被修改了。

这样的话,我们是不是可以在装饰器函数里面调用另外一个函数呢,再来看看下面代码的实验结果

 1 def decorator_funtion(func):
 2     def inner(*args,**kwargs):
 3         print('原函数执行前!')
 4         result=func(*args,**kwargs)
 5         print('原函数执行后!')
 6         another_function(result)
 7         return result
 8     return inner
 9 @decorator_funtion
10 def function(*args,**kwargs):
11     '''最原始的函数'''
12     print('本函数的任务是打印:',args,kwargs)
13     time.sleep(2)
14     return 'i am function result'
15 def another_function(*args,**kwargs):
16     print('我是另外一个函数,任务是打印',args,kwargs)
17     return 'i am another_function result'
18 
19 if __name__ == '__main__':
20     args=['我是原始函数',]
21     kwargs={'name':'flyinghappy','age':40,}
22     function(*args,**kwargs)

测试结果:

 

 看到了,装饰器函数果然调用执行了another_funtion函数,并且是接收的function函数的返回值'i am function result'

那如果在 another_function上加上这装饰器的话,会发生什么。。。。。呵呵呵!自己去试试吧!

加载全部内容

相关教程
猜你喜欢
用户评论