廖老师的教程实在太高深,没弄懂,点击打开链接
def deco_functionNeedDoc(func):
if func.__doc__ == None :
print func, "has no __doc__, it's a bad habit."
else:
print func, ':', func.__doc__, '.'
return func
@deco_functionNeedDoc
def f():
print 'f() Do something'
@deco_functionNeedDoc
def g():
'I have a __doc__'
print 'g() Do something'
f()
g()
print f
print g
这段代码打印结果如下:
<function f at 0x0238F930> has nodoc, it's a bad habit.
<function g at 0x0238F8B0> : I have a doc .f() Do somethingg() Do something
<function f at 0x0238F930>
<function g at 0x0238F8B0>
当时我就晕菜了,想了很久,原来在@装饰器函数的时候就会调用装饰器,装饰器函数return func,而func就是传进去的参数f。这个时候把代码改改。def deco_functionNeedDoc(func):
if func.__doc__ == None :
print func, "has no __doc__, it's a bad habit."
else:
print func, ':', func.__doc__, '.'
def func_1(*args, **kw):
print func.__name__,' : this is func_1'
return func_1
@deco_functionNeedDoc
def f():
print 'f() Do something'
@deco_functionNeedDoc
def g():
'I have a __doc__'
print 'g() Do something'
f()
g()
print f
print g
此时的打印结果:
<function f at 0x023CF930> has no __doc__, it's a bad habit.
<function g at 0x023CF8B0> : I have a __doc__ .
f : this is func_1
g : this is func_1
func_1
func_1
问题至此,应该很明了了~~只是,装饰器拿来干嘛呢??应用在什么情况下呢??待探索
最后再贴一个超级大团圆,太有意思了,这个不解释了,困了,理解了这个,估摸装饰器的基本原理就透彻了。
def deco_functionNeedDoc(func1):
if func1.__name__ == "yyy" :
print func1, "the func1 == yyy"
else:
print func1, ':', func1.__doc__, '.'
def xxx() : # y + f + h + x
func1() # y + f + h + f + h
print "plus xxx"
return func1() # y + f + h + f + h
return xxx
def deco_functionNeedDocxxx(func2):
if func2.__name__ == "hhh" :
print func2, "the func2 == hhh"
else:
print func2, ':', func2.__doc__, '.'
def yyy(): # y + f + h + f + h
print "plus yyy"
func2() # f + h
return func2() # f + h
return yyy
def deco_functionNeedDochhh(func3):
if func3.__name__ == "f" :
print func3, "the func3 == f"
else:
print func3, ':', func3.__doc__, '.'
def hhh() : # = f + h
func3() # = f
print "plus hhh"
return "Hello Wrold"
return hhh
@deco_functionNeedDoc
@deco_functionNeedDocxxx
@deco_functionNeedDochhh
def f():
print 'print original fff'
f()
print "------------"
print f
print "------------"
print f()
结果如下:
<function f at 0x109a2b938> the func3 == f
<function hhh at 0x109a2b9b0> the func2 == hhh
<function yyy at 0x109a2ba28> the func1 == yyy
plus yyy
print original fff
plus hhh
print original fff
plus hhh
plus xxx
plus yyy
print original fff
plus hhh
print original fff
plus hhh
------------
<function xxx at 0x109a2baa0>
------------
plus yyy
print original fff
plus hhh
print original fff
plus hhh
plus xxx
plus yyy
print original fff
plus hhh
print original fff
plus hhh
Hello Wrold