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
  • 相关阅读:
    Shell命令之文本操作
    乘法表
    万年历
    猜数游戏
    Linux下如何进行FTP安装与设置
    CentOS 安装nload(流量统计)
    linux下创建用户并且限定用户主目录
    ftp 解决不能上传问题
    【题解】[TJOI2018]数学计算
    【平衡树做题记录】
  • 原文地址:https://www.cnblogs.com/hukey/p/7028557.html
Copyright © 2011-2022 走看看