• python装饰器1


    装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。

    这里举一个简单例子,例如,小琨要吃冰激凌,小明要吃冰果,小王要吃老冰棍

     1 # -*- coding utf-8 -*-
     2 
     3 def a():
     4     print("小琨吃冰激凌")
     5 
     6 def b():
     7     print("小明吃冰果")
     8 
     9 def c():
    10     print("小王吃老冰棍")
    11 
    12 a()
    13 b()
    14 c()
    15 
    16 
    17 小琨吃冰激凌
    18 小明吃冰果
    19 小王吃老冰棍

    但是他们吃之前没有洗手,三个人都要先洗手再吃,在不修改原有函数下:

     1 # -*- coding utf-8 -*-
     2 
     3 def first(func):
     4     def inner():
     5         print("先洗手")
     6         return func()
     7     return inner
     8 
     9 @first
    10 def a():
    11     print("小琨吃冰激凌")
    12 
    13 @first
    14 def b():
    15     print("小明吃冰果")
    16 
    17 @first
    18 def c():
    19     print("小王吃老冰棍")
    20 
    21 a()
    22 b()
    23 c()
    24 
    25 
    26 先洗手
    27 小琨吃冰激凌
    28 先洗手
    29 小明吃冰果
    30 先洗手
    31 小王吃老冰棍

    如果被装饰的函数需要带参数的情况下:

     1 # -*- coding utf-8 -*-
     2 
     3 def first(func):
     4     def inner(arg):
     5         print("先洗手")
     6         return func(arg)
     7     return inner
     8 
     9 @first
    10 def a(aaa):
    11     print("小琨吃冰激凌,%s"%aaa)
    12 
    13 @first
    14 def b(bbb):
    15     print("小明吃冰果,%s"%bbb)
    16 
    17 @first
    18 def c(ccc):
    19     print("小王吃老冰棍,%s"%ccc)
    20 
    21 a("不洗手,以后剁手")
    22 b("不洗手,以后剁手")
    23 c("不洗手,以后剁手")
    24 
    25 
    26 先洗手
    27 小琨吃冰激凌,不洗手,以后剁手
    28 先洗手
    29 小明吃冰果,不洗手,以后剁手
    30 先洗手
    31 小王吃老冰棍,不洗手,以后剁手
  • 相关阅读:
    在Vue中使用Echart图表库。【全网最简单】
    asp.net core的授权过滤器中获取action上的Attribute
    用node.js给C#写一个数据表的实体类生成工具
    node.js操作MySQL数据库
    基于node.js的爬虫框架 node-crawler简单尝试
    Angular双向绑定简单理解
    使用.Net core3.0 开发斗图小程序后端+斗图小程序
    Django的命令操作,python
    python,函数式编程
    python 推导式的用法
  • 原文地址:https://www.cnblogs.com/fanyunpeng/p/6306684.html
Copyright © 2020-2023  润新知