学习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:

    

     

猜你喜欢

转载自www.cnblogs.com/hui2002/p/9715545.html