鱼C论坛

 找回密码
 立即注册
查看: 1929|回复: 2

为什么这个myfunc不会调用call func 这里的call func是扫码意思呢

[复制链接]
发表于 2023-4-2 22:06:14 | 显示全部楼层 |阅读模式

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

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

x
import time
def time_master(func):
    def call_func():
        print("开始运行程序。。")
        start=time.time()
        func()
        stop=time.time()
        print("结束程序运行。。。")
        print(f"一共耗费了{(stop-start):.2f}")
    return call_func

def myfunc():
    time.sleep(2)
    print("我循环鱼c")
myfunc=time_master(myfunc)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-2 22:11:48 | 显示全部楼层
首先,从代码中可以看出,你定义了一个装饰器 time_master,这个装饰器接收一个函数 func 作为参数,

然后在其内部定义了一个新的函数 call_func。这个 call_func 函数会在调用 func 前后分别输出一些信息,并计算 func 的运行时间。

接着,你定义了一个名为 myfunc 的函数,其功能是让程序暂停两秒钟,然后输出一个字符串。

然后,你通过下面这行代码将 myfunc 函数传递给 time_master 装饰器:
myfunc = time_master(myfunc)

这一行代码实际上会将 time_master 装饰器应用于 myfunc 函数,

然后将返回的 call_func 函数赋值给 myfunc。至此,你已经将原始的 myfunc 函数用 call_func 函数进行了包装。

但是,你在代码中没有实际调用 myfunc 函数。因此,你看不到 call_func 函数的输出。

你需要在代码的最后加上一行 myfunc(),以便实际调用经过装饰的 myfunc 函数。

这是修改后的代码:
import time

def time_master(func):
    def call_func():
        print("开始运行程序。。")
        start = time.time()
        func()
        stop = time.time()
        print("结束程序运行。。。")
        print(f"一共耗费了{(stop-start):.2f}")
    return call_func

def myfunc():
    time.sleep(2)
    print("我循环鱼c")

myfunc = time_master(myfunc)

# 调用经过装饰的 myfunc 函数
myfunc()

在这个例子中,调用 call_func 是通过调用经过装饰的 myfunc 函数实现的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-4 16:36:02 | 显示全部楼层
小甲鱼教过的,用@语法糖就可以解决了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 23:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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