栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python装饰器@函数名的介绍与应用、带参数的装饰器、不带参数装饰器

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python装饰器@函数名的介绍与应用、带参数的装饰器、不带参数装饰器

1、装饰器概述

1、装饰器本质:是一个函数,该函数用来处理其他函数,可以让其他函数在不修改代码前提下增加额外的功能,装饰器的返回值可以是一个函数对象。
2、使用场景:插入日志,事务处理,缓存,权限校验等。
3、优点:可以抽离出大量与函数功能本身无关的雷同代码,并且可以复用。
4、总结:为已存在的对象,增加额外的概念。

2、代码演示

1、需求:执行某测试用例,服务器的响应时间是多少?
2、Python代码

2.1、Python代码-初始版本

缺点:
    1、函数名称test_001修改后,show_time(test_001)函数也需要修改,比较麻烦。
    2、破坏了原有代码的逻辑,预期是执行test_001,但是现在却是在执行show_time。
import time
def test_001():
    print('执行测试用例')
    time.sleep(1)

def show_time(func):
    # 开始时间
    start_time = time.time()
    func()
    # 结束时间
    end_time = time.time()
    print('服务器响应时间: ', end_time-start_time)
    return end_time-start_time

show_time(test_001)
# 输出:
# 执行测试用例
# 服务器响应时间:  1.0

2.2、Python代码-优化版本-1

缺点:每次执行一次都得重新赋值,比较麻烦。
    foo=show_time(foo) 
    foo()
import time
def show_time(func):
    def inner():
        start_time = time.time()
        func()
        end_time = time.time()
        print('服务器响应时间: ', end_time-start_time)
    return inner  # 返回函数对象

def test_001():
    print('执行测试用例')
    time.sleep(1)

test = show_time(test_001)
test()
# 输出:
# 执行测试用例
# 服务器响应时间:  1.0

2.3、Python代码-优化版本-2 使用装饰器(不带参数) @

import time
def show_time(func):
    def inner():
        start_time = time.time()
        func()
        end_time = time.time()
        print('服务器响应时间: ', end_time-start_time)
    return inner

@show_time # 等价 test=show_time(test_001)
def test_001():
    print('执行测试用例')
    time.sleep(1)

test_001()
# 输出:
# 执行测试用例
# 服务器响应时间:  1.0

2.4、Python代码-优化版本-3 使用装饰器(带参数) @

import time
import time
def some_body_run(name):
    def show_time(func):
        def inner():
            start_time = time.time()
            func()
            end_time = time.time()
            print('服务器响应时间:', end_time-start_time)
            print('执行者:', name)
        return inner  # 返回函数对象
    return show_time

@some_body_run('tom')  # 等价 test = some_body_run('tom')
def test_001():
    print('执行测试用例')
    time.sleep(1)

test_001()
# 输出结果
# 执行测试用例
# 服务器响应时间: 1.0
# 执行者: tom
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002455.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号