zoukankan      html  css  js  c++  java
  • python笔记(五)装饰器函数

    装饰器函数

    装饰器的本质:一个闭包函数

    装饰器的功能:在不修改原函数及其调用方式的情况下对原函数的功能镜像扩展

    装饰器的原则:对扩展开放,对修改封闭

    装饰器的固定格式

     1 def wrapper(func):
     2     def inner(*args,**kwargs)
     3         '''执行函数前要做的内容'''          
     4         ret = func(*args,**kwargs)
     5         '''执行函数后要做的内容'''
     6         return ret
     7     return inner
     8 #以上为装饰器的固定格式
     9 @wrapper  # get=wrapper(get)=inner 语法糖
    10 def get()
    11     pass    

    带参数的装饰器

     1 def outer(flag):
     2     def timer(func):
     3         def inner(*args,**kwargs):
     4             if flag:
     5                 print('''执行函数之前要做的''')
     6             re = func(*args,**kwargs)
     7             if flag:
     8                 print('''执行函数之后要做的''')
     9             return re
    10         return inner
    11     return timer
    12 @outer(False)  # 套上一个新的函数即可
    13 def func():
    14     print(111)
    15 func()

    多个装饰器装饰同一个函数

     1 def wrapper1(func):
     2     def inner():
     3         print('wrapper1 ,before func')
     4         func()
     5         print('wrapper1 ,after func')
     6     return inner
     7 
     8 def wrapper2(func):
     9     def inner():
    10         print('wrapper2 ,before func')
    11         func()
    12         print('wrapper2 ,after func')
    13     return inner
    14 
    15 @wrapper2
    16 @wrapper1
    17 def f():
    18     print('in f')
    19 
    20 f()
  • 相关阅读:
    .net 第一次请求比较慢
    配置文件读取与修改
    关系型数据库设计
    dynamic动态类型的扩展方法
    软件测试作业(三)
    软件测试作业(二)
    软件项目管理作业(二)
    软件项目管理作业(一)
    软件测试作业(一)
    C#最后一次作业(暂定)
  • 原文地址:https://www.cnblogs.com/zxq520921/p/9420487.html
Copyright © 2011-2022 走看看