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

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

解决返回值的问题

基本装饰器返回值处理不了
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