• python初级装饰器编写


    最近项目太忙好久没有学习python了,今天更新一下吧~~

    1.什么是python装饰器:

      装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象,它经常用于有切面的需求的场景,比如:插入日志,性能测试,事务处理,缓存,权限校验等场景,装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用

    概括的讲,装饰器的作用就是为已存在的函数或对象添加额外的功能

    2.上代码练习初级装饰器的写法:

      

     1 """定义一个装饰器"""
     2 
     3 
     4 def debug(func):
     5     def wrapper():
     6         print("[debug]:enter {} ()".format(func))
     7         return func()
     8     return wrapper
     9 
    10 
    11 @debug
    12 def say_hello():
    13     print('hello')
    14 
    15 
    16 say_hello()
    17 
    18 
    19 """这个debug函数其实就是一个装饰器,他对原函数进行了包装并返回了另外一个函数,额外添加了一些功能"""
    20 
    21 """这是一个最简单的装饰器,那么一个问题也出现了,如果被装饰的函数需要传入参数,那么这个装饰器就坏了,因为返回的函数并不能接受参数,可以修改为
    22     指定装饰器函数wrapper接受和原函数一样的参数如:
    23 """
    24 
    25 
    26 def debug2(func):
    27     def wrapper(saysomething):
    28         print("[debug]:enter {} ()".format(func))
    29         return func(saysomething)
    30     return wrapper
    31 
    32 
    33 @debug2
    34 def say_hello1(saysomething):
    35     print(saysomething)
    36 
    37 
    38 say_hello1('哈哈哈')
    39 
    40 
    41 """但是又出现了n个问题,因为有很多函数,你只管你自己的函数,别人的函数参数是什么样子,那么解决方案就是python提供了可变参数
    42     *args和关键字参数**kwargs,有了这两个参数,装饰器就可以用于任意目标函数了.
    43 """
    44 
    45 
    46 def debug3(func):
    47     def wrapper(*args,**kwargs):
    48         print("[debug]:enter {} ()".format(func))
    49         print('Prepare and say...')
    50         return func(*args,**kwargs)
    51     return wrapper
    52 
    53 
    54 @debug3
    55 def say(something):
    56     print('hello{}'.format(something))
    57 
    58 
    59 @debug3
    60 def say1(one,two):
    61     print('先说一件事:{} 再说第二件事:{}'.format(one,two))
    62 
    63 
    64 say('说一下可变参数')
    65 say1('下班','吃饭')
    66 
    67 
    68 
    69 """恭喜你至此,你已经掌握了初级的装饰器的写法"""

    后续在深入学习装饰器的写法~~~

  • 相关阅读:
    Netty NioEventLoop 源码解析(运行相关)
    挖矿病毒的回溯(稍后补充,原来是自己傻逼了)
    关于centos后台执行的坑
    记录编写TS的一些想法
    webstorm永久激活
    PCL学习笔记(六):ubuntu下QT配置PCL
    PCL学习笔记(二)、PCL编码风格
    PCL学习笔记(三):PCL的点类型
    PCL学习笔记(四):PCD文件格式
    PCL学习笔记(五):PCD文件的IO操作
  • 原文地址:https://www.cnblogs.com/jiyanjiao-702521/p/9811952.html
Copyright © 2020-2023  润新知