装饰器
装饰器就是闭包函数的一种应用场景 一 为何要用装饰器
#开放封闭原则:对修改封闭,对扩展开放 二 什么是装饰器
装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象。
强调装饰器的原则:
1 不修改被装饰对象的源代码
2 不修改被装饰对象的调用方式
装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能 三 装饰器的使用
1. 无参装饰器
def 装饰器名字(func):
def wrapper(*args,**kwargs):
#func是被装饰的对象,这里可以写执行前的功能
res=func(*args,**kwargs)
# 这里可以写执行后的功能
return res
return wrapper @装饰器名字 #被装饰的函数名字 = 装饰器名字(被装饰的函数内存地址)
def 被装饰的函数名字():
pass 2. 有参装饰器
def 装饰器名字(参数1,参数2,...):
def outter(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
return res
return wrapper
return outter
@装饰器名字(值1,值2,...) #@outter
def 被装饰的函数名字():
pass 3. 语法糖:在被装饰对象正上方单独一行写
无参:@装饰器的名字
有参:@装饰器的名字(arg1,arg2,...) @timmer # index=timmer(index)
def index():
pass @auth2(engine='file') # @名字 # index=名字(index)
def index():
pass 叠加多个装饰器
@deco1
@deco2
@deco3
def index():
pass
解释语法的顺序:自下而上,deco3=》deco2=》deco1
调用index()时才开始触发装饰器内部闭包函数的执行,闭包函数执行顺序是:自上而条,
deco1.wrapper1=>deco2.wrapper2=>deco3.wrapper3 wrapper.__name__=func.__name__ (函数名字赋值)
wrapper.__doc__=func.__doc__ (注释的内用赋值#)

PYTHON-有参装饰器,无参装饰器,语法糖的更多相关文章

  1. python装饰器无参及有参案例

    装饰器无参和有参案例:

  2. Python虚拟机函数机制之无参调用(一)

    PyFunctionObject对象 在Python中,任何一个东西都是对象,函数也不例外.函数这种抽象机制,是通过一个Python对象——PyFunctionObject来实现的 typedef s ...

  3. JAVA基础——构造函数方法总结(有参构造和无参构造)

    使用构造器时需要记住: 1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名) 2.每个类可以有一个以上的构造器 3.构造器可以有0个.1个或1个以上的参数 4.构造器没有返回 ...

  4. 详解 Python 的二元算术运算,为什么说减法只是语法糖?

    原题 | Unravelling binary arithmetic operations in Python 作者 | Brett Cannon 译者 | 豌豆花下猫("Python猫&q ...

  5. Python 装饰器(无参,有参、多重))

    Python装饰器介绍 在Python中,装饰器(decorator)是在闭包的基础上发展起来的. 装饰器的实质是一个高阶函数,其参数是要装饰的函数名,其返回值是完成装饰的函数名,其作用是为已经存在的 ...

  6. python函数:装饰器、修正、语法糖、有参装饰器、global与nonlocal

    一.装饰器 二.装饰器修正1 三.装饰器修正2 四.装饰器的语法糖 五.有参.无参装饰器 六.global与nonlocal 一.装饰器 ''' 1 什么是装饰器 器=>工具 装饰=>指的 ...

  7. Java子类初始化调用父类无参构造

    实在是服了自己,子类初始化调用父类无参构造这种初学者都应该知道的事,我给忘了. 记得当初看书的时候各种概念抄在笔记本上,再上机实践,以为一辈子都不会忘,还是给忘了. 这件事说明了两个问题: 1.我没有 ...

  8. Python-装饰器(语法糖)上下五千年和前世今生

    装饰器上下五千年和前世今生,这里我们始终要问,装饰器为何产生?装饰器产生解决了什么问题?什么样的需求推动了装饰器的产生?思考问题的时候,始终要问,为什么要这样,而不是那样或者其他样.这里我不先说,也不 ...

  9. python语法糖之有参装饰器、无参装饰器

    python的装饰器简单来说就是函数的一种形式,是为了扩展原来的函数功能而设计的. 装饰器的特别之处在于它的返回值也是一个函数,可以在不改变原有函数代码的基础上添加新的功能 # 先定义一个函数及引用# ...

随机推荐

  1. 多线程状态下调用SimpleDateFormat.format()抛出 ArrayIndexOutOfBoundsException 异常

    本来想在类的顶部设置一个 静态的SimpleDateFormat常量 public final static DateFormat dateFormatGMT = new SimpleDateForm ...

  2. codeblocks下的汇编语言

    Debug->Debugging windows->Disassembly F4+F7 每条语句的调试,查看变量 可以通过两者的比较来互相学习 1.通过查看汇编代码学习c如何改进,减少代码 ...

  3. vue router.push(),router.replace(),router.go()

    1.router.push(location)=====window.history.pushState 想要导航到不同的 URL,则使用 router.push 方法.这个方法会向 history ...

  4. MySQL_select语句(不定时更新)

    1.SELECT语句 select if(fraction>=60 and fraction<=100,'合格','不合格') from sp_employeezzvalidate;

  5. strace常用参数详解

    strace常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. strace命令大家应该比我熟悉吧,如果你不知道,呵呵,会可能跟我一样被人说:“我怀疑你是假运维”,不过没关 ...

  6. Forth 语言概要 - Forth: An underview

    Forth 语言概要 - Forth: An underview 原作者 Peter Knaggs 原文标题< Forth: An underview > 译者: 未知 译文链接: htt ...

  7. QT_文本编辑器_源码下载

    源码下载: 链接: http://pan.baidu.com/s/1c21EVRy 密码: qub8 实现主要的功能有:新建,打开,保存,另存为,查找(查找的时候需要先将光标放到最下面位置才能查全,不 ...

  8. bzoj 1724 优先队列 切割木板

    倒着的石子合并,注意不是取当前最长木板贪心做,而是取当前最小累加答案: 例如 4 5 6 7 若按第一种思路:ans=22+15+9 第二种:ans=22+13+9,可以先从中间某一块分开,这样答案更 ...

  9. android 加载图片

    package mydemo.mycom.demo2; import android.graphics.Bitmap; import android.graphics.BitmapFactory; i ...

  10. Java SE之浅谈JDK SDK JRE

    JDK(Java Development Kit):   1.定义:编写Java程序的程序员使用的软件开发工具包,又被称为Java SDK (Java Software Development Kit ...