• 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 """恭喜你至此,你已经掌握了初级的装饰器的写法"""

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

  • 相关阅读:
    C#生成静态两方法
    ASP.NET C# 生成静态页面简单方法
    sql日期格式化
    Div+Css+JS做多个显示/隐藏内容块
    Request获取url各种信息的方法
    asp.net遍历页面所有的按钮(或控件)
    Donews.com:SpyMac.com也提供了1G的Email.
    再见 Swagger UI!国人开源了一款超好用的 API 文档生成框架,Star 4.7K+,真香!!
    面试官:new Object[5] 一共创建了几个对象?
    面试官:select......for update 会锁表还是锁行?别答错了!
  • 原文地址:https://www.cnblogs.com/jiyanjiao-702521/p/9811952.html
Copyright © 2020-2023  润新知