python-装饰器-装饰函数带参数(三层def,两层return,语法糖)
# -*- coding:utf-8 -*-
# __author__:
# 2022/5/8
# 需要知道服务器响应速度,还需要知道谁执行了测试用例
import time
def show_time(flag): # 接收装饰函数入参
def show_time_name(func):# 接收被装饰函数本身
def inner(*args,**kwargs): # 接收被装饰函数入参
begin_time = time.time()
func(*args,**kwargs)
end_time = time.time()
print('服务器响应时间为:%s' % (end_time-begin_time))
print('装饰器传入的参数:%s' % flag)
# return func(*args,**kwargs) 也可以在这边去做执行
return inner
return show_time_name
@show_time('aaa') # foo = show_time('aaa')() foo = show_time_name(),这边一定要注意@show_time后面没有括号但是也会去执行一层,加上括号就会执行两层
def foo(*args):
amount = 0
for i in args:
amount += i
print(amount)
time.sleep(1)
foo(3) # inner()
【1】语法糖:@show_time--放在foo被装饰函数上面,指的是在调用foo函数的时候,会先去执行(直接执行,不是函数名)show_time函数,foo被装饰函数名作为入参传入
【2】@show_time---即 foo = show_time(foo),此时foo=show_time_name
【3】@show_time('aaa')---即先执行show_time,show_time的入参为aaa,返回show_time_name;然后再去执行show_time_name('aaa')(foo),即执行show_time_show(foo),返回inner
【4】此时 foo = inner
【5】最终执行foo(),即执行inner(),在inner里面有被装饰函数foo的执行
注:这个博主讲解的很好:https://www.bilibili.com/video/BV1JW411i7HR?spm_id_from=333.337.search-card.all.click
分类:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下