首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >python-带返回值的装饰器

python-带返回值的装饰器

作者头像
用户7886150
修改于 2020-12-21 11:00:32
修改于 2020-12-21 11:00:32
1.8K0
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: Python中带有参数的装饰器

》基本装饰器没有参数没有返回值 

》当功能函数有返回值的情况下 

解决返回值的问题 

基本装饰器返回值处理不了 

import time

# 装饰器函数

def cont_time(func):

    """统计时间的装饰器"""

    def inner():

        start_time = time.time()

        print('计时开始。。。')

        func()

        end_time = time.time()

        print('计时结束,总共耗时{:.2f}秒'.format(end_time - start_time))

    return inner

# 功能函数

@cont_time  # 相当于 do_work = cont_time(do_word)

def do_work():

    """有耗时的函数"""

    print('do_work开始')

    time.sleep(1)

    print('do_work结束')

    return 'work is done'  # !返回值需要传递

res = do_work()

print(res)

结果 

C:\Users\python_hui\Anaconda3\python.exe G:/test/a/1.py 计时开始。。。 do_work开始 do_work结束 计时结束,总共耗时1.01秒 None 

Process finished with exit code 0 

解决装饰器返回值的问题 

import time

# 装饰器函数

def cont_time(func):

    """统计时间的装饰器"""

    def inner():

        start_time = time.time()

        print('计时开始。。。')

        res = func()  # !这里接收

        end_time = time.time()

        print('计时结束,总共耗时{:.2f}秒'.format(end_time - start_time))

        return res  # !这里返回

    return inner

# 功能函数

@cont_time  # 相当于 do_work = cont_time(do_word)

def do_work():

    """有耗时的函数"""

    print('do_work开始')

    time.sleep(1)

    print('do_work结束')

    return 'work is done'  # 返回值需要传递

res = do_work()

print(res)

结果,拿到返回值了 

C:\Users\python_hui\Anaconda3\python.exe G:/test/a/1.py 计时开始。。。 do_work开始 do_work结束 计时结束,总共耗时1.00秒 work is done 

Process finished with exit code 0

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档