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

    装饰器就是闭包

    使用装饰器需要在定义函数时@装饰器函数名。相当于执行func=wrapper(func)=inner

    但是如果调用func.__name__ 查看的是Inner的函数名,同样查看函数文档也为inner的文档。

    可以定义inner.__name__=func.__name__.

    当然python内置的模块给出了wraps方法.

    带参数的装饰器用两个闭包 @外部函数名加括号(参数)相当于执行这个函数,返回要用wrapper 意思还是@wrapper 但此时外部函数的参数已经传到inner里了

    多个装饰器修饰一个函数的执行顺序及原理

    比较直观的执行顺序,像是套娃从最外层执行,也就是最顶的wrapper2,但在原理上是先执行的wrapper1

    原理是wrapper1将它下边离它最近的函数f传进,f=wrapper1(f)=inner1

    而wrpapper2又将离它最近的inner1作为参数传进来 f=wrapper2(inner1)=inner2

    所以f函数在调用时是套娃结构的顺序。

  • 相关阅读:
    Android开发环境搭建
    Noi 2016
    [二分图&最小割]
    [BZOJ 3145][Feyat cup 1.5]Str 解题报告
    [动态图]
    [组合数取模][中国剩余定理]
    [BZOJ 4436][Cerc2015]Kernel Knights
    [NOI 2014]做题记录
    [线段树合并]
    [树套树模板]
  • 原文地址:https://www.cnblogs.com/daju/p/10037028.html
Copyright © 2011-2022 走看看