python関数の1つの装飾器
python関数の1つの装飾器
アクセラレータの構文は@で始まり、次にアクセラレータ関数の名前とオプションのパラメータです.続いて、装飾器は、修飾された関数と装飾関数のオプションパラメータを宣言します.次のように
複数のアクセラレータの場合、数学的定義を使用して次のように表されます.
Pythonの場合:
単純関数装飾
パラメータ付き関数を修飾する
eg:
装飾テープパラメータ
アクセサリーバンドパラメータは、包装を追加する必要があります
アクセラレータの構文は@で始まり、次にアクセラレータ関数の名前とオプションのパラメータです.続いて、装飾器は、修飾された関数と装飾関数のオプションパラメータを宣言します.次のように
@decorator(dec_opt_args)
def funcToBeDecorated(func_opt_args):
.
.
複数のアクセラレータの場合、数学的定義を使用して次のように表されます.
( g.f )(x) = g( f(x) )
Pythonの場合:
@g
@f
def foo():
.
.
g(f(foo))
に等しい単純関数装飾
#!/usr/bin/env python
from time import ctime,sleep
def deco(func):
def wrappedFunc():
print '[%s] %s called' % (ctime(),func.__name__)
return func()
return wrappedFunc
@deco
def foo():
print 'foo called'
if __name__=='__main__':
foo()
########################################
localhost:~ army$ ./deco.py
[Sun Apr 13 16:20:01 2014] foo called
foo called
パラメータ付き関数を修飾する
eg:
#!/usr/bin/env python
from time import ctime,sleep
def deco(func):
def wrappedFunc(*argv):
print '[%s] %s called' % (ctime(),func.__name__)
return func(*argv)
return wrappedFunc
@deco
def add(a,b):
print a+b
if __name__=='__main__':
add(1,2)
########################################
localhost:~ army$ ./deco.py
[Sun Apr 13 16:25:01 2014] add called
3
装飾テープパラメータ
アクセサリーバンドパラメータは、包装を追加する必要があります
#!/usr/bin/env python
from time import ctime,sleep
def deco(arg):
def wrappedFunc(func):
def innerFunc(*argv):
print '[%s] %s called' % (arg , func.__name__)
return func(*argv)
return innerFunc
return wrappedFunc
@deco('module')
def foo(a,b,c):
print a+b+c
if __name__=='__main__':
foo(1,2,3)
########################################
localhost:~ army$ ./deco.py
[module] foo called
6