zoukankan      html  css  js  c++  java
  • 函数-装饰器

    编辑本博客

    补充:

    保留原函数信息,如函数名,函数注释等内容

    import functools
    def wrapper(func):
        @functools.wraps(func)#保留原函数的原信息,如函数名,函数备注之类数据,否则被装饰过的函数名会变成inner
        def inner(*args,**kwargs):
            return func(*args,**kwargs)
        return inner
    
    def f1():
        print('f1')
    @wrapper
    def f2():
        print('f1')
    print(f1.__name__)
    print(f2.__name__)

    软件开发应该遵循“开放--封闭”原则。语法糖可满足该需求,官方名称即装饰器。

    • 封闭:已实现的功能代码块不应该被修改
    • 开放:对现有功能的扩展开放
    #定义一个装饰器函数
    def login(func):
        def _inner():
            #xxxx
            func()
        return _inner
    
    #调用login装饰器,对home()方法进行登陆控制
    @login
    def home():
        pass

    函数需参数的装饰器

    #函数需参数的装饰器函数
    def login(func):
        def _inner(*arg,**kwargs)
            #xxxx
            func(*arg,**kwargs)
        return _inner
    
    #函数传入参数index
    @login
    def home(index):
        pass

    装饰器需参数的装饰器

    #装饰器带参数的装饰器
    def login(auth_type):
        def _outer(func):
            def _inner(*arg,**kwargs)
                #登陆验证代码写这里,xxxx
                func(*arg,**kwargs)
            return _inner
        return _outer
    
    #函数和装饰器都带参数
    @login('wx')
    def home(index):
        pass
  • 相关阅读:
    203. Remove Linked List Elements
    86. Partition List
    143. Reorder List
    876. Middle of the Linked List
    246. Strobogrammatic Number
    202. Happy Number
    数据类型转换
    表达式
    面向对象
    对齐
  • 原文地址:https://www.cnblogs.com/yaya625202/p/8799393.html
Copyright © 2011-2022 走看看