Interesting example of Python decorator
Miss Liao's tutorial is too advanced to understand. Click to open the link.
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_functionNeedDocdef f(): print 'f() Do something'@deco_functionNeedDocdef g(): 'I have a __doc__' print 'g() Do something'f()g()print fprint g
The output of this Code is as follows:
Has no Doc, It's a bad habit.
: I have Doc. F () Do somethingg () Do something
At that time, I was dizzy. After thinking for a long time, I used to call the decorator when I called the @ decorator function. The decorator function return func, and func is the input parameter f. Modify the code at this time.
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_functionNeedDocdef f(): print 'f() Do something'@deco_functionNeedDocdef g(): 'I have a __doc__' print 'g() Do something'f()g()print fprint g
Print the result at this time:
Has no _ doc __, it's a bad habit.
: I have a _ doc __.
F: this is func_1
G: this is func_1
Func_1
Func_1
At this point, the problem should be clear ~~ Just, what is the ornament ?? Under what circumstances ?? Waiting for exploration
Finally, I posted another super reunion, which is very interesting. I don't want to explain it, but I am sleepy. After understanding this, I can fully evaluate the basic principle of the decoration device.
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 xxxdef 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 yyydef 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_functionNeedDochhhdef f(): print 'print original fff'f()print "------------"print fprint "------------"print f()
The result is as follows:
The func3 = f
The func2 = hhh
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
------------
------------
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