python装飾器の一般的な使用方法の分析
2782 ワード
この例では、python装飾器の一般的な使用方法について説明します.皆さんの参考にしてください.具体的には以下の通りです.
pythonの装飾器は、spring AOPのような機能を実現するために使用することができます.同じように、ある方法が実行される前に何をしたのか、実行された後に何をしたのか、あるいはログを記録したり、実行した時間などを記録したりすることができます.さらに、これを使って権限ブロックをしたりすることもできます.pythonの装飾モードを2つの側面から説明します.
1.一般的な方法の装飾
2.classクラスでのメソッドの装飾にパラメータを与える必要がない場合
3.classクラスでのメソッドの装飾にパラメータを与える必要がある場合
一、普通の方法の装飾.例えば、一つの方法が実行する時間を計算する.
実行結果:
in foo()の実行開始にかかる時間:6.55415628267 e-05
時間差が計算されていることがわかります.普通の方法のように、1つの関数に書いて実現するのではありません.
二、class類における方法の装飾に対して、パラメータを与える必要がない場合
実行結果:
in foo()の実行開始にかかる時間:4.42208134735 e-05
三、class類における方法の装飾に対して、パラメータを与える必要がある場合
実行結果:
内容:第1ステップ開始:第1ステップ開始内容:第2ステップ開始:第2ステップ開始内容:第2ステップ開始内容:第3ステップ開始:第3ステップ開始Work 1 st Work 2 nd Work 3 rd
Pythonに関する詳細は、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python Socketプログラミングテクニックまとめ」、「Python関数使用テクニックまとめ」、「Python文字列操作テクニックまとめ」、「Python入門と進級クラシックチュートリアル」のトピックを参照してください.
ここではPythonプログラムの設計に役立つことを願っています.
pythonの装飾器は、spring AOPのような機能を実現するために使用することができます.同じように、ある方法が実行される前に何をしたのか、実行された後に何をしたのか、あるいはログを記録したり、実行した時間などを記録したりすることができます.さらに、これを使って権限ブロックをしたりすることもできます.pythonの装飾モードを2つの側面から説明します.
1.一般的な方法の装飾
2.classクラスでのメソッドの装飾にパラメータを与える必要がない場合
3.classクラスでのメソッドの装飾にパラメータを与える必要がある場合
一、普通の方法の装飾.例えば、一つの方法が実行する時間を計算する.
#coding:utf-8
import time
def timeit(func):
def wrapper(*args, **kv):
start = time.clock()
print ' '
func(*args, **kv)
end =time.clock()
print ' :', end - start
return wrapper
@timeit
def foo():
print 'in foo()'
if __name__=='__main__':
foo()
実行結果:
in foo()の実行開始にかかる時間:6.55415628267 e-05
時間差が計算されていることがわかります.普通の方法のように、1つの関数に書いて実現するのではありません.
二、class類における方法の装飾に対して、パラメータを与える必要がない場合
#coding:utf-8
import time
def timeit(func):
def wrapper(*args, **kv):
start = time.clock()
print ' '
func(*args, **kv)
end =time.clock()
print ' :', end - start
return wrapper
class MySpendTime(object):
def __init__(self):
pass
@timeit
def foo(self):
print 'in foo()'
spendtime=MySpendTime()
spendtime.foo()
実行結果:
in foo()の実行開始にかかる時間:4.42208134735 e-05
三、class類における方法の装飾に対して、パラメータを与える必要がある場合
#coding:utf-8
'''
Created on 2012-11-1
@author: yihaomen.com
'''
def UpdateUI(msg, step):
print u" :", msg
print u" : %s " % step
def dec(func):
def wapper(self, *args, **kwargs):
func(self,*args, **kwargs)
return wapper
return dec
class Command(object):
def Excute(self):
self.Work1st()
self.Work2nd()
self.Work3rd()
@UpdateUI(" ","1")
def Work1st(self):
print "Work1st"
@UpdateUI(" ", 2)
def Work2nd(self):
print "Work2nd"
@UpdateUI(" ", 3)
def Work3rd(self):
print "Work3rd"
if __name__=="__main__":
command = Command()
command.Excute()
実行結果:
内容:第1ステップ開始:第1ステップ開始内容:第2ステップ開始:第2ステップ開始内容:第2ステップ開始内容:第3ステップ開始:第3ステップ開始Work 1 st Work 2 nd Work 3 rd
Pythonに関する詳細は、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python Socketプログラミングテクニックまとめ」、「Python関数使用テクニックまとめ」、「Python文字列操作テクニックまとめ」、「Python入門と進級クラシックチュートリアル」のトピックを参照してください.
ここではPythonプログラムの設計に役立つことを願っています.