zoukankan      html  css  js  c++  java
  • [ Python

    装饰器有很多经典的使用场景,例如插入日志、性能测试、事务处理等等,有了装饰器,就可以提取大量函数中与本身功能无关的类似代码,从而达到代码重用的目的。

    装饰器有两种写法:

      1. 装饰器不传参数

      2. 装饰器自带参数

    第一种,装饰器不传参写法:

    def log1(func):
        @wraps(func)
        def wrapper(*args, **kw):
            print('%s():' % func.__name__)
            return func(*args, **kw)
        return wrapper
    
    # 第一种不带参数的装饰器调用
    @log1
    def fn1():
        print('2017-06-16')
    print(fn1())
    
    # 执行结果如下:
    # fn1():
    # 2017-06-16
    View Code

    第二种,装饰器自带参数写法:

    # 第二种,装饰器带参数写法:
    def log2(text):
        def decorator(func):
            def wrapper(*args, **kw):
                print('%s  %s()' %(text, func.__name__))
                return func(*args, **kw)
            return wrapper
        return decorator
    
    
    # 第二种带参数的装饰器调用
    
    @log2('hkey')
    def fn2():
        print('2017-06-16')
    
    print(fn2())
    
    # 执行结果如下:
    # hkey  fn2()
    # 2017-06-16
    View Code

    将两种装饰器合并起来的函数:

    # Author:hkey
    def log(text):
        if hasattr(text, '__call__'):
            def wrapper(*arg, **kw):
                print('%s():' %text.__name__)
                return text(*arg, **kw)
            return wrapper
        else:
            def decorator(func):
                def wrapper(*args, **kw):
                    print('%s():' %text)
                    return func(*args, **kw)
                return wrapper
        return decorator
    
    @log
    def f():
        print('2017-6-17')
    
    print(f())
    View Code
  • 相关阅读:
    mysql相关笔记
    qt杂项
    rpm离线安装整理
    linux fopen个数限制的问题(文件描述符限制)
    解决free():invalid pointer:0x00000000000000155455 ****的问题。
    linux c获取系统时间戳
    ubuntu QT Creater 安装
    LinkedHashMap如何保证顺序性
    HashMap原理(二) 扩容机制及存取原理
    HashMap原理(一) 概念和底层架构
  • 原文地址:https://www.cnblogs.com/hukey/p/7028557.html
Copyright © 2011-2022 走看看