【问题标题】:Not able print the time elapse for function by using the decorator无法使用装饰器打印功能的经过时间
【发布时间】:2021-11-11 07:03:48
【问题描述】:

我创建了一个装饰器,它通过在运行程序时为给定的装饰器提供 0 毫秒的输出来计算函数所用的时间,在调试工具中它显示开始/结束时间已计算但无法打印(结束 - 开始) 如代码和输出所示。

我的代码:

import time

def time_cal(func):
    def wrapper(*args, **kwargs):
        start=time.time()
        result = func(*args, **kwargs)
        end= time.time()
        print(func.__name__+ ' took ' + str((end-start)*1000) + ' milli seconds')
        return result
    return wrapper

a = (1,2,3,5,3,4,4)

b= [1,2,46,565,464]

c= {'num1': '1','num2' : '2', 'num3' : '3'}
en=[]

@time_cal
def evevn_num(i):
    for i in b:
        if i%2==0:
           en.append(i)
        else:
            print("none are present")
    return print(en)
@time_cal
def list_num(f,s,t):
    print('number one',f)
    print('number two', s)
    print('number three', t)

kwargs = {"t": "Three", "s": "Two", "fs": "One"}

evevn_num(b)
list_num(1,2,3)

输出:

none are present
none are present
[2, 46, 464]
evevn_num took 0.0 milli seconds
number one 1
number two 2
number three 3
list_num took 0.0 milli seconds

Process finished with exit code 0

请根据代码帮助我解决时间计算

【问题讨论】:

  • 尽管代码中存在错误(查看传递给 even_num() 的参数),但事实上这些函数执行得非常快。原则上,您的计时器装饰器在功能上是正确的,尽管 time.perf_counter() 是首选
  • 我复制粘贴了您的代码并且工作正常...可能是您的电脑非常快?将您的代码复制到一个新的空文件中并重试

标签: python time python-decorators


【解决方案1】:

您的代码按预期工作,只是完成功能的速度只需要.0013666152954102 seconds即可完成。

为了进行测试,请将time.sleep(1) 添加到您的装饰器或尝试使用更复杂的函数。

def time_cal(func):
    def wrapper(*args, **kwargs):
        start=time.time()
        time.sleep(1)
        result = func(*args, **kwargs)
        end= time.time()
        print(func.__name__+ ' took ' + str((end-start)*1000) + ' milli seconds')
        return result
    return wrapper

结果:

none are present
none are present
even_num took 1009.1550350189209 milli seconds
number one 1 
number two 2 
number three 3 
list_num took 1000.5834102630615 milli seconds

【讨论】:

    猜你喜欢
    • 2019-10-20
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    相关资源
    最近更新 更多