zoukankan      html  css  js  c++  java
  • 学习Python第十一天

    ‘ ’ ‘

    1.  什么是装饰器

         器=>工具

         装饰=>指的是为被装饰对象添加新功能

         装饰器本身可以是任意可调用的对象=>函数

           

          目标:写一个函数来为另外一个函数添加新功能

    2,为何要用装饰器

      开放封闭原则: 软件一旦上线就应该对修改封闭:

            1. 不能修改功能的原代码

            2.  也不能修改功能的调用方式

                     对扩展开放:

                                 可以为原有的功能添加新的功能

             装饰器就是要在不修改功能原代码以及调用方式的前提下为原功能

       3.如何用装饰器

       ’ ‘ ’

     import  time

     des indesx():

           print('welcome to index page')

           time.sleep(3)

           dwf wrapper(func):

                   # func=最原始那个index的内存地址()

                      stop=tine.tine()

                      print('run  time is %s'  %(stop-start))

              rturn  wrapper

     index=outter (index)  # index=outter(最原始那个indwx的内存的)  #index=wrapper函数的内地址

    indwx()  # wraper()

    ' ' '

    # @ 装饰器的名字:要在被装饰对象正上方单独一行写上

    import  time

    def timmer (func): # func=最原始那个home的地址

                  def wrapper (*args,**kwards):

                  stop=time,time()

                  res=func(*ars,**kwargs)

                  stop=tme,time()

                  print('run  time is %s'  %(stop-start))

                  return  res

      wrapper.--doc--=func.__doc__

      wrapper__ name__=func._name__

     @timmer #index=timmer(index) ## index=timmer(最原始那个index的内存地址 #index=wrapper的函数内地址  

    def  index():

    """这是index功能“”“

       print('welcome  to  index  pade')

       time.sleep(3)

       rturn  123

      @ timmer  # home=timmer(home)  # index=timmer(最原始的那个home的内存地址) # index=wrapper函数内地址

    def home(name):

         """这是home功能“”‘

            print ('welcome  %s  to home  page' %name)

            time.sleep(1)

     # home('egon')  # wrapper('egon')

    #  index()  # wrapper()

     # print(help(index))

    #  print (help(home))

    # print (index.--doc--)

     '''

     from  functools import wraps

    import  time 

    def  timmer(func):  # func=最原始那个home的内地址

                    @ wraps(func)

                        dwf t wrapper (*arg,**kwargs):

                                       star=time,time()

                     res=func(*arjs,**kwards)

                   stop=time,time()

             print('run  time is %s'  %(stop-tart))

                  return  wrapper

      @ timmer

     def  index():

         """这是index功能“”“

     print('welcome  to  index  page')

       time,slep(1)

    print(help(index))

    print(index,__name--)

     # 无惨装饰器的模板

    #  def  outter (unc):

    #    def wrapper(*args;**keargs)"

         res=func(*args,**kwargs)

            return  res

    return  wrapper

     import  time  

     user- info={'current-user'-none}

      def  auth(func):

         def wrapper(*args,**kwargs):

        if  user- info['current-user'] is not noe:

           res =func(*args,**kwargs)

          return  res

    inp - user=input('username>>>:').strip()

    inp - pwd=input('pasword>>>:’)。strip()

    if inp-usr'=='egon'an ind-pwd=='123':

        # 记录登录状态

      user-info['current-user']=inp-user

       print('login uccessful')

     res=furn res

    else:

       print('user or  password  error')

     return  wrapper

     @ auth

    def  index():

    """这是home功能“”“

    print('welcome to index  page')

     time,sleep(2)

    return123

    @ auth

     def home(name):;

    """这是home功能“”“

     print('welcome %e to home  page' %name)

      time, sleep(1)

     index()

    home('egon')

    #  有惨装饰器的名字:要在被装饰对象正上方单独一行写上

     import  time

    def  timmer (func): #func=最原始那个home的内地址

     # 无参装饰器的模板

    # def outter(func):

    #     def wrapper (*ars,**kwargs):

             res=unc(*args,**kwargs)

           return  wrapper

     import time

     user-info={'current-user' ;none}

     def anfth(func):

      def wrappry(*args;**kwargs):

      if user-info[*current-user'] s not none:

        res=func(*args,**kwargs)

       return  res

     inp-user=input('usename>>>;').stip()

    inp-pwd=input('password.>>>:').strip()

    if  inp - user == 'egon' an inp-pwd=='123':

       # 记录状态

    user-info['current-user']=inp-user

    print('login  ssuccessful')

    res=func(*args,**kwargs)

    return  res

    else:

           print('user or password error')

       return  wrapper

    @ auth

    def index():

       """这是indwx 功能“”“

    print('welcome  to indwx  page')

    time,sleep(2)

    return  123

     @ auth

    def home(name):

    """这是home功能“”“

    print('welcome %s  to  index page')

    time,sleep(1)

    # index()

    3 home ('egon')

    #

    有参装饰器

    dwf outter2(xxx,yyy):

     def  outter(func):

        dwf wrapper(*args,**kwargs):

           res=func(*args,**kwargs)

             print(xxx)

             print(yyy)

     return  rs

    return  wrapper

    return  outter

    import  time

    user-info=['currentuser':none]

    dwf auth2(engine='file'):

        def auth (func):

            def  auth(func):

                   def wrapper (*args;**kwargs)"

                       if  user-info['current-user']  is  not none:

        

         

  • 相关阅读:
    IO模型详解
    Java中的CAS实现原理
    深入理解幂等性
    区块链基本原理入门
    通俗易懂讲解IO模型
    java高级特性(4)--枚举
    static、final和finalize详解
    锁(3)-- DB锁
    浅析项目中的并发
    分布式(1)-- 分布式锁
  • 原文地址:https://www.cnblogs.com/hui2002/p/9715545.html
Copyright © 2011-2022 走看看