首页 > 代码库 > 初摄装饰器

初摄装饰器

一、理论知识:

      定义:装饰器本身是函数,就是为了为其他函数添加附加功能。

    原则:

        1、不能修改被修饰函数的源代码

        2、不能修改被修饰函数的调用方式

    装饰器知识必备:

        1、函数即“变量”

        2、高阶函数

                a:把一个函数名作为实参传给另外一个函数

                b:返回值中包含函数值

        3、嵌套函数

高阶函数+嵌套函数=》装饰器


二、低潮版


import time

def timmer(func):

def bar(*args,**kwargs): #*args,**kwargs:表示非固定参数

start_time=time.time()

func(*args,**kwargs)

stop_time=time.time()

print (‘the func run time %s‘%(stop_time-start_time))

return bar #只是返回了内存地址,并没有运行bar()函数

@timmer #调用装饰器timmer。相当于:test1=timmer(test1)

def test1(): #由于返回bar()的地址,所以test1=timmer(test1)=bar

time.sleep(3)

print (‘in the test1‘)

@timmer

def test2(name):

print (‘in the test2‘,name)

#test1 = timmer(test1) #把返回的bar()函数内存地址赋值给test1

test1()

test2(2)


三、高潮版

    当被修饰函数中出现返回值(return ‘from home‘)

user,passwd= ‘peter‘,‘123qwe‘

def auth(auth_type):

print (‘auth_type:‘,auth_type)

def outer(func):

def warpper(*args,**kwargs):

print (‘warpper:‘,*args,**kwargs)

username = input (‘Username:‘).strip()

password = input (‘Password:‘).strip()

if (user==username and passwd ==password):

print (‘\033[32;1mUser has passed authentication\033[0m‘)

te=func(*args,**kwargs) #相当于执行home(*args,**kwargs)

print (‘----------‘)

return te

else:

exit(‘\033[31;1mInvalid username or password\033[0m‘)

return warpper

return outer

def index():

print (‘welcome to index page‘)

@auth(auth_type=‘local‘)

def home(name):

print (‘welcome to home page‘,name )

return ‘from home‘

@auth(auth_type=‘lodap‘)

def bbs():

print (‘welcome to bbs page‘)

index()

print (home(2))

bbs()


本文出自 “涉猎装饰器” 博客,请务必保留此出处http://fandecorator.blog.51cto.com/12987132/1933477

初摄装饰器