文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python decorator

2023-01-31 02:36

关注

def benchmark(func): 

    """ 

    A decorator that prints the time a function takes 

    to execute. 

    """ 

    import time 

    def wrapper(*args, **kwargs): 

        t = time.clock() 

        res = func(*args, **kwargs) 

        print func.__name__, time.clock()-t 

        return res 

    return wrapper 

 

 

def logging(func): 

    """ 

    A decorator that logs the activity of the script. 

    (it actually just prints it, but it could be logging!) 

    """ 

    def wrapper(*args, **kwargs): 

        res = func(*args, **kwargs) 

        print func.__name__, args, kwargs 

        return res 

    return wrapper 

 

 

def counter(func): 

    """ 

    A decorator that counts and prints the number of times a function has been executed 

    """ 

    def wrapper(*args, **kwargs): 

        wrapper.count = wrapper.count + 1 

        res = func(*args, **kwargs) 

        print "{0} has been used: {1}x".format(func.__name__, wrapper.count) 

        return res 

    wrapper.count = 0 

    return wrapper 

 

@counter 

@benchmark 

@logging 

def reverse_string(string): 

    return str(reversed(string)) 

 

print reverse_string("Able was I ere I saw Elba") 

print reverse_string("A man, a plan, a canoe, pasta, heros, rajahs, a coloratura, maps, snipe, percale, macaroni, a gag, a banana bag, a tan, a tag, a banana bag again (or a camel), a crepe, pins, Spam, a rut, a Rolo, cash, a jar, sore hats, a peon, a canal: Panama!") 

 

#outputs: 

#reverse_string ('Able was I ere I saw Elba',) {} 

#wrapper 0.0 

#wrapper has been used: 1x  

#ablE was I ere I saw elbA 

#reverse_string ('A man, a plan, a canoe, pasta, heros, rajahs, a coloratura, maps, snipe, percale, macaroni, a gag, a banana bag, a tan, a tag, a banana bag again (or a camel), a crepe, pins, Spam, a rut, a Rolo, cash, a jar, sore hats, a peon, a canal: Panama!',) {} 

#wrapper 0.0 

#wrapper has been used: 2x 

#!amanaP :lanac a ,noep a ,stah eros ,raj a ,hsac ,oloR a ,tur a ,mapS ,snip ,eperc a ,)lemac a ro( niaga gab ananab a ,gat a ,nat a ,gab ananab a ,gag a ,inoracam ,elacrep ,epins ,spam ,arutaroloc a ,shajar ,soreh ,atsap ,eonac a ,nalp a ,nam A 

@counter 

@benchmark 

@logging 

def get_random_futurama_quote(): 

    import httplib 

    conn = httplib.HTTPConnection("slashdot.org:80") 

    conn.request("HEAD", "/index.html") 

    for key, value in conn.getresponse().getheaders(): 

        if key.startswith("x-b") or key.startswith("x-f"): 

            return value 

    return "No, I'm ... doesn't!" 

 

print get_random_furturama_quote() 

print get_random_furturama_quote() 

 

#outputs: 

#get_random_futurama_quote () {} 

#wrapper 0.02 

#wrapper has been used: 1x 

#The laws of science be a harsh mistress. 

#get_random_futurama_quote () {} 

#wrapper 0.01 

#wrapper has been used: 2x 

#Curse you, merciful Poseidon! 

Python itself provides several decorators: property, staticmethod, etc. Django use decorators to manage caching and view permissions. Twisted to fake inlining asynchronous functions calls. This really is a large playground. 

 

 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯