zoukankan      html  css  js  c++  java
  • 装饰器

     
    装饰器:
      定义:本质是函数,功能是用来装饰其他函数(就是为其他函数添加附加功能)。
      原则:1、不能修改被装饰的函数的源代码
           2、不能修改被装饰的函数的调用方式
    装饰器对于被装饰的函数是透明的(既函数本身不知道自己被装饰)
     
     
    实现装饰器知识储备:
      1、函数即“变量”
      2、高阶函数
        a.把一个函数名当作参数传递给另外一个函数
        b.返回值中包含函数名
      3、函数嵌套
     
    小结:利用高阶函数+嵌套函数完成装饰器的功能
     
    例子:
     1 user = 'daxin'
     2 passwd = '123456'
     3 
     4 def auth_type(auth_type):
     5     def auth(func):
     6         def auth_page(*args):
     7             if auth_type == 'local':
     8                 username = input('Please input your user:')
     9                 password = input("Please input your passwd:")
    10                 if username == user and passwd == password:
    11                     func(*args)
    12                 else:
    13                     print('Username or password Error!')
    14             else:
    15                 print('LDAP')
    16                 func(*args)
    17         return auth_page
    18     return auth
    19 
    20 def index():
    21     print('in the index page')
    22 @auth_type('local')      --> local传递到最外层的func
    23 def home():
    24     print("in the home page")
    25 @auth_type('ldap')
    26 def bbs():
    27     print('in the bbs page')
    28 
    29 index()
    30 home()
    31 bbs()

    例子2:

     1 import functools
     2 
     3 def decorator(logintype='3'):
     4     def decorator1(func):
     5         @functools.wraps(func)
     6         def wrapper(*args,**kwargs):
     7             if logintype == '1':
     8                 print('begin call')
     9                 func(*args,**kwargs)
    10                 print('end call')
    11             elif logintype == '2':
    12                 print('start call')
    13                 func(*args,**kwargs)
    14                 print('over call')
    15             else:
    16                 print('test start')
    17                 func(*args,**kwargs)
    18                 print('test start')
    19         return wrapper
    20     return decorator1
    21 
    22 
    23 @decorator()
    24 def a(name):
    25     print('in the F name is %s' % name)
    26 
    27 @decorator('2')
    28 def b():
    29     print('in the B')
    30 @decorator('1')
    31 def c():
    32     print("in the C")
    33 
    34 c()
    35 b()
    36 a('123')
  • 相关阅读:
    K2新网站(官网和BPM社区)正式上线了
    在线体验K2 BPM微信审批
    K2 BPM + SAP,实现全方面管理企业
    KStar ----BPM应用框架,K2 的新星
    SharePoint加K2,将Portal系统与BPM系统完美整合!
    迈瑞综合应用及流程管理平台项目
    深度学习教程网站
    Pytorch自定义参数层
    pytorch BCELoss和BCEWithLogitsLoss
    Some helper functions for PyTorch
  • 原文地址:https://www.cnblogs.com/dachenzi/p/6616968.html
Copyright © 2011-2022 走看看