ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python-装饰器-装饰函数带参数(三层def,两层return,语法糖)

2022-05-10 12:32:08  阅读:157  来源: 互联网

标签:执行 return 函数 show python inner time foo 装饰


# -*- 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(),即执行show_time_show(),返回inner

【4】此时 foo = inner

【5】最终执行foo(),即执行inner(),在inner里面有被装饰函数foo的执行

注:这个博主讲解的很好:https://www.bilibili.com/video/BV1JW411i7HR?spm_id_from=333.337.search-card.all.click

 

标签:执行,return,函数,show,python,inner,time,foo,装饰
来源: https://www.cnblogs.com/flowers-pansy/p/16247571.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有