zoukankan      html  css  js  c++  java
  • Python装饰器

    关键字lambda 表示匿名函数,冒号前面的 x 表示函数参数。
    def is_not_empty(s):
        return s and len(s.strip()) > 0
    filter(is_not_empty, ['test', None, '', 'str', '  ', 'END'])
    修改为:
    print filter(lambda s: s and len(s.strip())>0, ['test', None, '', 'str', '  ', 'END'])
     
    装饰器:
    Python的 decorator 本质上就是一个高阶函数,它接收一个函数作为参数,然后,返回一个新函数。
    使用 decorator 用Python提供的 @ 语法,这样可以避免手动编写 f = decorate(f) 这样的代码。
    计算函数调用的时间可以记录调用前后的当前时间戳,然后计算两个时间戳的差。
    参考代码:
    import time
    def performance(f):
        def fn(*args, **kw):#使得调入的函数参数可以任意多个
            t1 = time.time()
            r = f(*args, **kw)
            t2 = time.time()
            print 'call %s() in %fs' % (f.__name__, (t2 - t1))
            return r
        return fn
     
    @performance
    def factorial(n):
        return reduce(lambda x,y: x*y, range(1, n+1))
    print factorial(10)
    

      

     
     
    上一节的@performance只能打印秒,请给 @performace 增加一个参数,允许传入's'或'ms':
    要实现带参数的@performance,就需要实现:
    my_func = performance('ms')(my_func)
    需要3层嵌套的decorator来实现。
    import time
    def performance(unit):
        def perf_decorator(f):
            def wrapper(*args, **kw):
                t1 = time.time()
                r = f(*args, **kw)
                t2 = time.time()
                t = (t2 - t1) * 1000 if unit=='ms' else (t2 - t1)
                print 'call %s() in %f %s' % (f.__name__, t, unit)
                return r
            return wrapper
        return perf_decorator
     
    @performance('ms')
    def factorial(n):
        return reduce(lambda x,y: x*y, range(1, n+1))
    print factorial(10)
    

      

     
    好好学习,天天向上
  • 相关阅读:
    ZXing 生成、解析二维码图片的小示例
    OpenLDAP 2.4.x源码安装配置
    Elasticsearch & Kibana with Shield
    Kibana SSL
    Kibana 官方示例
    ELK 处理分析日志(nginx,syslog)
    Elasticsearch 负载均衡集群
    Elasticsearch REST API小记
    ELK 安装配置
    ELK 安装配置
  • 原文地址:https://www.cnblogs.com/topass123/p/12923304.html
Copyright © 2011-2022 走看看