鱼C论坛

 找回密码
 立即注册
查看: 697|回复: 5

装饰器函数问题

[复制链接]
发表于 2020-5-6 11:53:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这个是我写的一个函数装饰器函数,用来计算代码执行时间的, 但是发现别人写的有def performacne_test函数里面再定义一个函数,这样做的意义何在,毕竟我这样也能实现了,求详细指导?
import time

def performance_test(testfc):
    start = time.perf_counter()
    testfc()
    end = time.perf_counter()
    print(f'本次测试函数用时:{end - start}秒')
@performance_test
def forlook():
    for i in range(50000000):
        pass

forlook

附录上别人的写法   
def my_decorator(func):
    def wrapper():               ##干嘛要在这里再去定义一个函数呢?  
        start = time.perf_counter()
        func()
        end = time.perf_counter()
        print(f'函数运行时间{end - start}')
    return wrapper

def for_loop():
    for i in range(50000000):
        pass
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-6 11:58:46 | 显示全部楼层
这样可以让参数这样输入
my_decorator()()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-6 12:47:49 | 显示全部楼层
liuzhengyuan 发表于 2020-5-6 11:58
这样可以让参数这样输入

如果函数带参,能否详细一些说明呢  谢谢,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-6 12:59:46 From FishC Mobile | 显示全部楼层
从入门到富豪 发表于 2020-5-6 12:47
如果函数带参,能否详细一些说明呢  谢谢,

再定义一个函数,是因为在调用装饰器的时候,会把函数作为一个参数传入其中进行计算
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-6 13:07:50 | 显示全部楼层
你这根本不是装饰器,直接把函数执行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-6 15:38:47 | 显示全部楼层
装饰器的本质是闭包,闭包是函数嵌套。你的貌似不算装饰器吧。
我也不知道说的对不对,欢迎指正
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 05:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表