资讯专栏INFORMATION COLUMN

python 装饰器顺序

trigkit4 / 1385人阅读

def logging(level):
    def wrapper(func):
        def inner_wrapper(*args, **kwargs):
            print "[{level}]: enter function {func}()".format(
                level=level,
                func=func.__name__)
            return func(*args, **kwargs)
        return inner_wrapper
    return wrapper

@logging(level="INFO")
def say(something):
    print "say {}!".format(something)

# 如果没有使用@语法,等同于
# say = logging(level="INFO")(say)

@logging(level="DEBUG")
def do(something):
    print "do {}...".format(something)

if __name__ == "__main__":
    say("hello")
    do("my work")

装饰器调用顺序

#!/usr/bin/env python
# encoding: utf-8

def decorator_a(func):
    print func
    print "Get in decorator_a"
    def inner_a(*args, **kwargs):
        print "Get in inner_a"
        return func(*args, **kwargs)
    return inner_a

def decorator_b(func):
    print func
    print "Get in decorator_b"
    def inner_b(*args, **kwargs):
        print "Get in inner_b"
        return func(*args, **kwargs)
    return inner_b

@decorator_b
@decorator_a
def f(x):
    print "Get in f"
    return x * 2

f(1)

执行结果


Get in decorator_a

Get in decorator_b
Get in inner_b
Get in inner_a
Get in f

f(1)等价于decorator_b(decorator_a(f))(1)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42924.html

相关文章

  • python 多个装饰的调用顺序

    摘要:如果不使用装饰器的话,普通的做法可能是在中写一堆校验代码来判断用户是否登录,然后决定后面的执行逻辑,这样比较麻烦。 前言 装饰器是程序开发中经常会用到的一个功能,也是python语言开发的基础知识,如果能够在程序中合理的使用装饰器,不仅可以提高开发效率,而且可以让写的代码看上去显的高大上^_^ 使用场景 可以用到装饰器的地方有很多,简单的举例如以下场景 引入日志 函数执行时间统计 执...

    wapeyang 评论0 收藏0
  • Python 装饰执行顺序迷思

    摘要:探究多个装饰器执行顺序装饰器是用于封装函数或代码的工具,网上可以搜到很多文章可以学习,我在这里要讨论的是多个装饰器执行顺序的一个迷思。这时候你该知道为什么输出结果会是那样,以及对装饰器执行顺序实际发生了什么有一定了解了吧。 探究多个装饰器执行顺序 装饰器是Python用于封装函数或代码的工具,网上可以搜到很多文章可以学习,我在这里要讨论的是多个装饰器执行顺序的一个迷思。 疑问 大部...

    frolc 评论0 收藏0
  • Python装饰-装饰流程,执行顺序

    摘要:最近看到一个关于的题文章其中的一个是装饰器的顺序问题就想写篇博客回顾下装饰器首先强烈推荐很久之前看的一篇博文翻译理解中的装饰器关于什么是装饰器看这篇文章就好了这里主要想写关于多个装饰器的执行流程装饰顺序示例代码初始化初始化输出结果初始化初始 最近看到一个关于Flask的CTF(RealWorld CTF 2018 web题bookhub)文章其中的一个trick是装饰器的顺序问题,就想...

    cpupro 评论0 收藏0
  • python中多个装饰的执行顺序

    今天讲一下python中装饰器的执行顺序,以两个装饰器为例。 装饰器代码如下: def wrapper_out1(func): print(--out11--) def inner1(*args, **kwargs): print(--in11--) ret = func(*args, **kwargs) print(--in12-...

    or0fun 评论0 收藏0
  • Python - 装饰decorator

    摘要:在这种代码运行期间动态增加功能的方式,称之为装饰器。四接收特定类型参数的装饰器装饰器可以接收参数,当调用装饰器返回的函数时,也就调用了包裹函数,把参数传入包裹函数,它将参数传递给被装饰的函数。执行结果执行结果 【题外话】心塞塞 心情down down down 有段时间没用装饰器了,然后然后问着就跪了~~~回来翻了翻资料和代码...... 一、什么是装饰器 装饰器,decor...

    HackerShell 评论0 收藏0
  • Python】一文弄懂python装饰(附源码例子)

    摘要:装饰器的使用符合了面向对象编程的开放封闭原则。三简单的装饰器基于上面的函数执行时间的需求,我们就手写一个简单的装饰器进行实现。函数体就是要实现装饰器的内容。类装饰器的实现是调用了类里面的函数。类装饰器的写法比我们装饰器函数的写法更加简单。 目录 前言 一、什么是装饰器 二、为什么要用装饰器 ...

    liuchengxu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<