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()
  • 相关阅读:
    Openstack----学习笔记
    如何往gitlab/github上游贡献代码
    搭建python虚拟环境virtualenv
    YAML格式
    mysql安装
    使用mysql服务实现负载均衡
    tomcat web服务的搭建
    通过SQL查询SQL服务器和客户端IP地址
    验证数字的正则表达式
    C# WinForm控件美化扩展系列之给TextBox加水印
  • 原文地址:https://www.cnblogs.com/zxq520921/p/9420487.html
Copyright © 2011-2022 走看看