有返回值和带参数的修饰器

Posted wulinmiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有返回值和带参数的修饰器相关的知识,希望对你有一定的参考价值。

加上返回值的

import time
def timmer(func): #func=test
def wrapper():
start_time=time.time()
res=func() #就是在运行test()
stop_time = time.time()
print(‘运行时间是%s‘ %(stop_time-start_time))
return res
return wrapper

@timmer #test=timmer(test)
def test():
time.sleep(3)
print(‘test函数运行完毕‘)
return ‘这是test的返回值‘

res=test() #就是在运行wrapper
print(res)

加上参数
import time
def timmer(func): #func=test1
def wrapper(*args,**kwargs): #test(‘linhaifeng‘,age=18) args=(‘linhaifeng‘) kwargs=‘age‘:18
start_time=time.time()
res=func(*args,**kwargs) #就是在运行test() func(*(‘linhaifeng‘),**‘age‘:18)
stop_time = time.time()
print(‘运行时间是%s‘ %(stop_time-start_time))
return res
return wrapper

# @timmer #test=timmer(test)
def test(name,age):
time.sleep(3)
print(‘test函数运行完毕,名字是【%s】 年龄是【%s】‘ %(name,age))
return ‘这是test的返回值‘

@timmer
def test1(name,age,gender):
time.sleep(1)
print(‘test1函数运行完毕,名字是【%s】 年龄是【%s】 性别【%s】‘ %(name,age,gender))
return ‘这是test的返回值‘

# res=test(‘linhaifeng‘,age=18) #就是在运行wrapper
# # print(res)
# test1(‘alex‘,18,‘male‘)

test1(‘alex‘,18,‘male‘)


# def test2(name,age,gender): #test2(*(‘alex‘,18,‘male‘,‘x‘,‘y‘),**)
# #name,age,gender=(‘alex‘,18,‘male‘,‘x‘,‘y‘)
# print(name)
# print(age)
# print(gender)
#
# def test1(*args,**kwargs):
# test2(*args,**kwargs) #args=(‘alex‘,18,‘male‘,‘x‘,‘y‘) kwargs=
#
# # test2(‘alex‘,18,gender=‘male‘)
#
# test1(‘alex‘,18,‘male‘)

以上是关于有返回值和带参数的修饰器的主要内容,如果未能解决你的问题,请参考以下文章

方法重载与重写

java中返回值和参数理解

Java面试题:重载和重写的区别

Postgres 存储函数可以同时具有返回值和输出参数吗?

抽象类接口作为方法返回值和参数

如何在返回新接收的值和缓存值之间的所有组合的迭代器时修复生命周期问题?