15260905077 发表于 2023-4-2 22:06:14

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

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)

isdkz 发表于 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 函数实现的。

Mta123456 发表于 2023-4-4 16:36:02

小甲鱼教过的,用@语法糖就可以解决了
页: [1]
查看完整版本: 为什么这个myfunc不会调用call func 这里的call func是扫码意思呢