Examples of python function decorator usage and python function examples
This document describes how to use the python function decorator. Share it with you for your reference. The details are as follows:
The decorator is often used in scenarios with cut-plane requirements. More typical scenarios include log insertion, performance testing, and transaction processing. The decorator is an excellent design for solving such problems,
With the decorator, we can extract a large number of identical codes irrelevant to the function itself and continue to reuse them. In summary, the purpose of the decorator is to add additional functions to existing objects.
#! Coding = UTF-8 import time def timeit (func): def wrapper (a): start = time. clock () func (1, 2) end = time. clock () print 'used: ', end-start print a return wrapper @ timeit # foo = timeit (foo) is exactly equivalent. # after use, the foo function changes, equivalent to wrapper: def foo (a, B): pass # decorator without parameters # wraper will decorate fn, return wraper, the returned wraper is the decorated fn def test (func): def wraper (): print "test start" func () print "end start" return wraper @ test foo (): print "in foo" foo ()
Output:
test start in foo end start
Modifier with parameters:
def parameter_test(func): def wraper(a): print "test start" func(a) print "end start" return wraper @parameter_test def parameter_foo(a): print "parameter_foo:"+a #parameter_foo('hello')
Output:
>>> test start parameter_foo:hello end start
Modifier:
def much_test(func): def wraper(*args, **kwargs): print "test start" func(*args, **kwargs) print "end start" return wraper @much_test def much1(a): print a @much_test def much2(a,b,c,d ): print a,b,c,d much1('a') much2(1,2,3,4)
Output:
test start a end start test start 1 2 3 4 end start
You can package another layer of decorator with parameters:
def tp(name,age): def much_test(func): print 'in much_test' def wraper(*args, **kwargs): print "test start" print str(name),'at:'+str(age) func(*args, **kwargs) print "end start" return wraper return much_test @tp('one','10') def tpTest(parameter): print parameter tpTest('python....')
Output:
in much_test test start one at:10 python.... end start
Class locker: def _ init _ (self): print ("locker. _ init _ () shoshould be not called. ") @ staticmethod def acquire (): print (" locker. acquire () called. (This is a static method) ") @ staticmethod def release (): print (" locker. release () called. (object instance not required ") def deco (cls): ''' cls must implement the acquire and release static methods ''' def _ deco (func): def _ deco (): print ("before % s called [% s]. "% (func. _ name __, cls) cls. acquire () try: return func () finally: cls. release () return _ deco @ deco (locker) def myfunc (): print ("myfunc () called. ") myfunc ()
Output:
>>> Before myfunc called [_ main __. locker]. locker. acquire () called. (This is a static method) myfunc () called. locker. release () called. (object instances are not required>
Class mylocker: def _ init _ (self): print ("mylocker. _ init _ () called. ") @ staticmethod def acquire (): print (" mylocker. acquire () called. ") @ staticmethod def unlock (): print (" mylocker. unlock () called. ") class lockerex (mylocker): @ staticmethod def acquire (): print (" lockerex. acquire () called. ") @ staticmethod def unlock (): print (" lockerex. unlock () called. ") def lockhelper (cls): ''' cls must implement the acquire and release static methods ''' def _ deco (func): def _ deco (* args, ** kwargs): print ("before % s called. "% func. _ name _) cls. acquire () try: return func (* args, ** kwargs) finally: cls. unlock () return _ deco class example: @ lockhelper (mylocker) def myfunc (self): print ("myfunc () called. ") @ lockhelper (mylocker) @ lockhelper (lockerex) def myfunc2 (self, a, B): print (" myfunc2 () called. ") return a + B if _ name __= =" _ main _ ": a = example (). myfunc () print (. myfunc () print (. myfunc2 (1, 2) print (. myfunc2 (3, 4 ))
Output:
before myfunc called.mylocker.acquire() called. myfunc() called. mylocker.unlock() called.before myfunc called.mylocker.acquire() called. myfunc() called. mylocker.unlock() called.Nonebefore __deco called.mylocker.acquire() called.before myfunc2 called.lockerex.acquire() called. myfunc2() called. lockerex.unlock() called. mylocker.unlock() called.3before __deco called.mylocker.acquire() called.before myfunc2 called.lockerex.acquire() called. myfunc2() called. lockerex.unlock() called. mylocker.unlock() called.7
I hope this article will help you with Python programming.