标签:python 装饰器
#!/usr/bin/python # -*- coding: utf-8 -*- __author__ = ‘gaogd‘ ‘‘‘ def auth(func): user = raw_input("input passwd: ").strip() if user == ‘gaogd‘: print "-----------welcome login------" func() else : print "---wrong passwd--------" def task0(): print "do somethin ....0" def task1(): print "do somethin ....1" def task2(): print "do somethin ....2" def task3(): print "do somethin ....3" auth(task0) ‘‘‘ ### 上面的方法,已经把调用的方式改变了,应该还有保留 task0() 这种调用方式 ‘‘‘ def auth(func): def wrapper(): user = raw_input("input passwd: ").strip() if user == ‘gaogd‘: print "-----------welcome login------" func() else : print "---wrong passwd--------" return wrapper ##当调用auth 函数的时候,仅仅返回weapper这个函数体而已,而没有执行函数。 def task0(): print "do somethin ....0" def task1(): print "do somethin ....1" def task2(): print "do somethin ....2" def task3(): print "do somethin ....3" task0=auth(task0) task0 print type(task0) task0() ##当调用auth 函数的时候,仅仅返回weapper这个函数体而已,而没有执行函数。 ##也就说执行task0=auth(task0),task0这个时候,并没有执行真正执行函数,只有加括号才是真正的执行 ### ‘‘‘ ‘‘‘ def auth(func): def wrapper(): user = raw_input("input passwd: ").strip() if user == ‘gaogd‘: print "-----------welcome login------" return func() else : print "---wrong passwd--------" return wrapper @auth def task0(): print "do somethin ....0" @auth def task1(): print "do somethin ....1" @auth def task2(): print "do somethin ....2" @auth def task3(): print "do somethin ....3" #task0=auth(task0) #print type(task0) ## 上面的@auth 等同与上面的 task0=auth(task0) task0() #### 一个函数可以添加多个装饰器 ‘‘‘ ‘‘‘ def auth(func): def wrapper(name): user = raw_input("input passwd: ").strip() if user == ‘gaogd‘: print "-----------welcome login------" return func(name) else : print "---wrong passwd--------" return wrapper @auth def task0(name): print "do somethin ....0",name @auth def task1(): print "do somethin ....1" @auth def task2(): print "do somethin ....2" @auth def task3(): print "do somethin ....3" #task0=auth(task0) #print type(task0) ## 上面的@auth 等同与上面的 task0=auth(task0) task0(‘cmd‘) #### 一个函数可以添加多个装饰器 ‘‘‘ 看完这些再看廖雪峰的文章就容易理解了! http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318435599930270c0381a3b44db991cd6d858064ac0000
本文出自 “奋斗吧” 博客,请务必保留此出处http://lvnian.blog.51cto.com/7155281/1847025
标签:python 装饰器
原文地址:http://lvnian.blog.51cto.com/7155281/1847025