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

    什么是装饰器?

    • 在不改变原来代码的基础上,修改代码的逻辑
    • 本质就是一个高阶函数
    • 语法糖是@
    • 分类
      • 函数装饰器:定义一个函数当做装饰器
      • 类装饰器:定义一个类当做装饰器
    • 装饰器可以修饰普通方法,类方法,类...
    • 装饰器可以叠加使用

    函数装饰器

    • 装饰器本身不带参数
    def decorator(func):
        def _decorator(*args, **kwargs):
            print('decorator called, start!')
            ret = func(*args, **kwargs)
            print('decorator called, end!')
            return ret
        return _decorator
    
    @decorator
    def test(data):
        print('test : %s' % data)
    
    test('ok')
    • 装饰器本身带参数
    def decorator(*args, **kwargs):
        print(args[0])
        print(kwargs['one'])
        def _decorator(func):
            def __decorator(*args, **kwargs):
                print('decorator called, start!')
                ret = func(*args, **kwargs)
                print('decorator called, end!')
                return ret
            return __decorator
        return _decorator
    
    @decorator('x', one = 'a')
    def test(data):
        print('test : %s' % data)
    
    test('ok')

    类装饰器

    • 类装饰器本身不带参数
    class decorator:
        def __init__(self, func):
            self.func = func
    
        def __call__(self, *args, **kwargs):
            print('decorator called, start!')
            ret = self.func(*args, **kwargs)
            print('decorator called, end!')
            return ret
    
    @decorator
    def test(data):
        print('test : %s' % data)
    
    test('ok')
    • 类装饰器本身带参数
    class decorator:
        def __init__(self, x):
            self.x = x
    
        def __call__(self, func):
            print(self.x)
            def _dectorator(*args, **kwargs):
                print('decorator called, start!')
                ret = func(*args, **kwargs)
                print('decorator called, end!')
                return ret
            return _dectorator
    
    @decorator('a')
    def test(data):
        print('test : %s' % data)
    
    test('ok')
  • 相关阅读:
    SAP 关于ALV 双击 打开其它事务码
    记一次PGSQL数据库恢复过程
    SAP 供应商主数据维护(字段示例)
    SAP 高仿 CKM3 物料成本价格分析报表SQL
    SAP scc4更改设置 (不允许更改资源库和跨客户端定)
    SAP 主数据 查重常用SQL
    SAP S4/HANA 连接SQL SERVER 数据库
    SAP VBKD业务表的情况处理
    SAP 物料主数据维护说明
    SAP CO成本控制 相关表
  • 原文地址:https://www.cnblogs.com/chusiyong/p/11563190.html
Copyright © 2011-2022 走看看