zoukankan      html  css  js  c++  java
  • 【廖雪峰老师python教程】——装饰器

    装饰器


    # 一个函数装饰器的列子
    def log(func):
        def wrapper(*args,**kwargs):
            print('Name=%s'%func.__name__)
            return func(*args,**kwargs)
        return wrapper
    @log
    def Print():
        print('2017-2-3')
        return None
    Print()
    '''
    观察上面的log,因为它是一个decorator,所以接受一个函数作为参数,并返回一个函数。
    通过@方法调用后,调用log输入Print为参数函数,在wrapper中修改,然后整合成为新的函数返回
    '''
    D:untitled1venvScriptspython.exe D:/untitled1/装饰器.py
    Name=Print
    2017-2-3

    常用装饰器模板


    •  无参数的装饰器:【因为返回的那个wrapper()函数名字就是'wrapper',所以,需要把原始函数的__name__等属性复制到wrapper()函数中,否则,有些依赖函数签名的代码执行就会出错。】
    import functools
    
    def log(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('call %s():' % func.__name__)
            return func(*args, **kw)
        return wrapper
    • 有参数的装饰器:【因为返回的那个wrapper()函数名字就是'wrapper',所以,需要把原始函数的__name__等属性复制到wrapper()函数中,否则,有些依赖函数签名的代码执行就会出错。】
    import functools
    
    def log(text):
        def decorator(func):
            @functools.wraps(func)
            def wrapper(*args, **kw):
                print('%s %s():' % (text, func.__name__))
                return func(*args, **kw)
            return wrapper
        return decorator

    装饰器案例


    # 一个装饰器计算函数执行时间
    import time, functools
    def log(func):
        @functools.wraps(func)    # 保证函数名一致的方法
        def wrapper(*args, **kw):
            ''' 下面三个为装饰器装饰后的功能增加项 '''
            oldTime = time.process_time()
            result = func(*args, **kw)
            newTime = time.process_time()
            print('函数 %s 运行时间为 %s ms' % (func.__name__ ,newTime - oldTime))
            return result
        return wrapper
    @log
    def test():
        for x in range(1, 10000000):
            x += 1
    test()

    友情链接:





  • 相关阅读:
    Git 使用juju
    svn Q&A
    ubuntu 常用命令
    java中set的交集、差集、并集的简单实现
    java 读写JSON(一)
    java类型转化之SimpleDateFormat-时间转化
    maven 基本常识以及命令
    maven遇到的问题
    java编程思想,对象导论
    条目5:避免创建不必要的对象
  • 原文地址:https://www.cnblogs.com/ChaoyuanJam/p/9741458.html
Copyright © 2011-2022 走看看