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上加上这装饰器的话,会发生什么。。。。。呵呵呵!自己去试试吧!
加载全部内容