首页 > 其他 > 详细

初摄装饰器

时间:2017-06-08 17:40:54      阅读:259      评论:0      收藏:0      [点我收藏+]

一、理论知识:

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

    原则:

        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

初摄装饰器

原文:http://fandecorator.blog.51cto.com/12987132/1933477

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!