美文网首页
对Python装饰器的一些理解

对Python装饰器的一些理解

作者: 小小看护 | 来源:发表于2017-10-18 10:53 被阅读7次

1.装饰器的定义

装饰器是对在运行期间对函数进行一些外部功能的扩展。也就是在其他函数不需要做任何代码变动的前提下增加额外功能。

2.装饰器的应用场景

插入日志、性能测试、事务处理、缓存、权限校验等场景

例如
我们在接收请求的时候多会看是否包含某一个元素。比如查看是否包含有code,如果有code,就打印错误并且ruturn返回

def requestedCode(*params):
    def _wrapper(func):
        def wrappered(*args, **kwargs):
            print('%s is running' % func.__name__)
            for code in params:
                print('错误错误')
                return
            return func(*args, *kwargs)

        return wrappered
    return _wrapper
    
@requestedCode('code')
def hello_world():
    print('i am world')
    
print(hello_world())

3.装饰器使用 @functools.wraps 的理由

Python 中使用装饰器对在运行期对函数进行一些外部功能的扩展。但是在使用过程中,由于装饰器的加入导致解释器认为函数本身发生了改变,在某些情况下——比如测试时——会导致一些问题。Python 通过 functool.wraps 为我们解决了这个问题:在编写装饰器时,在实现前加入 @functools.wraps(func) 可以保证装饰器不会对被装饰函数造成影响。比如,在 Flask 中,我们要自己重写 login_required 装饰器,但不想影响被装饰器装饰的方法,则 login_required 装饰器本身可以写成下面的样子:

def login_required_(func):
    @wraps(func)
    def decorated_view(*args, **kwargs):
        if current_app.login_manager._login_disabled:
            return func(*args, **kwargs)
        elif not current_user.is_authenticated:
            # return current_app.login_manager.unauthorized()
            return redirect(url_for("login.loginPage", next=request.url))
        return func(*args, **kwargs)

    return decorated_view

参考

如何理解Python装饰器?
Python 中实现装饰器时使用 @functools.wraps 的理由

相关文章

  • 2022-10-27

    10个美妙的Python装饰器对Python编程语言中我最喜欢的一些装饰器的概述。 简介 关于Python编程...

  • Python装饰器小谈

    近几日再次研究Python装饰器,对装饰器又有了新的理解和应用。如果这篇文章叫做小谈装饰器,不如重谈装饰器更来得亲...

  • 对Python装饰器的一些理解

    1.装饰器的定义 装饰器是对在运行期间对函数进行一些外部功能的扩展。也就是在其他函数不需要做任何代码变动的前提下增...

  • 2019-05-26python装饰器到底是什么?

    装饰器例子 参考语法 装饰器是什么?个人理解,装饰器,是python中一种写法的定义。他仍然符合python的基本...

  • Python中的Decorator装饰器

    Decorator 装饰器 理解decorator(装饰器)的关键, 在于理解在python中函数是第一公民, 并...

  • Python装饰器decorator

    我对Python装饰器的理解就是用一个函数去修饰另外一个函数。 装饰器 在运行原来功能的基础上,添加一些新的功能...

  • 装饰器模式

    介绍 在python装饰器学习 这篇文章中,介绍了python 中的装饰器,python内置了对装饰器的支持。面向...

  • python 装饰器 补充

    重新理解python 装饰器 python 装饰器是一个函数,被装饰器所装饰的代码块最终也是一个函数这个对于一般的...

  • python装饰器

    装饰器简述 要理解装饰器需要知道Python高阶函数和python闭包,Python高阶函数可以接受函数作为参数,...

  • Python学习资料整理(不间断更新)

    关于Python装饰器的相关文章资料 1、[翻译]理解PYTHON中的装饰器 本篇文章是作者翻译stackover...

网友评论

      本文标题:对Python装饰器的一些理解

      本文链接:https://www.haomeiwen.com/subject/uiusuxtx.html