lintcode-2089 · 使用 decorator 实现一个函数计时器

举报
搞前端的半夏 发表于 2021/11/30 22:17:27 2021/11/30
【摘要】 大家好,我是半夏👴,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注➕ 点赞 👍 加我微信:frontendpicker,邀你进群,一起学习交流前端,成为更优秀的工程师~关注公众号:半夏话前端,了解更多前端知识!点我探索新世界! 描述decorator 是 Python 中的一类特殊的语法,可以通过 @decorator_name 的方式写在被 decorate 的函数的上面一行...

大家好,我是半夏👴,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注➕ 点赞 👍 加我微信:frontendpicker,邀你进群,一起学习交流前端,成为更优秀的工程师~关注公众号:半夏话前端,了解更多前端知识!点我探索新世界!

描述

decorator 是 Python 中的一类特殊的语法,可以通过 @decorator_name 的方式写在被 decorate 的函数的上面一行。比如这样:

@decorator_name
def func():
    # do something
    pass

decorator 的作用是能够在函数执行之前和之后进行一些处理,而这类处理通常具备一定的通用性,需要包装到多个函数。因此使用 decorator 能够有效的避免重复代码和提升代码可读性。

这个题目的任务是需要你实现一个计时器的 decorator。这个 decorator 的名称被命名为 timer。我们将 timer 包裹在任何函数的外面,那么当这个函数被调用的时候,就会自动记录这个函数的执行时间并打印出来。比如这样:

@timer
def func():
    pass

你的任务是编辑 decorators.py 这个文件,实现一个 timer 的 decorator,并打印出函数的名字和被耗费时间。

**

decorator 内部的函数一定要记得 return 哦!

样例

这个题无需任何的输入数据,你可以查看 main.py 这个文件,你的代码在执行了 python main.py 之后应该输出

function func_a cost 0.1 seconds
function func_b cost 0.2 seconds

挑战

必须要用 decorator 的形式来实现,不可以使用其他绕过测试的方法

题解

装饰器是一个函数,接受一个函数(或者类)作为参数,返回值也是也是一个函数(或者类

time.time() 可以获取当前的时间。

format可以格式化数据结果。

import time


# write your code here
# you need to implement a decorator named timer
# the decorator will timer the decorated function and print the name of the
# function and the running time in format 'function a cost 0.1 seconds'
def timer(func):
    def warpper(*args,**kwargs):
        startTime=time.time()
        func(*args,**kwargs)
        endTime = time.time()
        costTime=round(endTime-startTime,1)
        print("function {func} cost {endTime} seconds".format(func=func.__name__,endTime=costTime))
    return warpper
               
        
@timer
def func():
    pass
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。