例えば:1チャールズ・リーは、タスクの手配を担当して、xxの技術有限公司で働く、
機能の憎悪憎悪を書くために弟の効率をテストするためのコードを記述します。
インポート時(1つのモジュール)
DEFインデックス():
time.sleep(2)
印刷(「ブログホームパークへようこそ」)
計算効率の操作機能
プリント(time.time())
START_TIME time.timeは=()
のインデックス()
END_TIME = time.time()
プリント(F 'この関数{END_TIME-START_TIME}の効率')
- Directorは鄧小平、李象、あまりにも多くの重複したコードをテストすることができます。
func1のDEF():
time.sleep(2)
印刷( 'ウェルカムホーム日記')
関数func2のDEF():
time.sleep(1)
印刷( 'ホームを見直しへようこそ')
= time.timeのSTART_TIME()
関数func1()
END_TIME = time.time()
プリント(F 'は、この関数の効率{END_TIME-START_TIME}')
= time.timeのSTART_TIME()
関数func2()
END_TIME = time.time()
プリント(F 'は、この関数の効率{END_TIME-START_TIME}')
- 機能に統合
:DEFの関数func1()
time.sleep(2)
印刷( 'ウェルカムホーム日記')
関数func2のDEF():
time.sleep(1)
印刷( 'ホームを見直しへようこそ')
test_time DEF(X):
START_TIME time.time =()
X()
)(= time.timeをEND_TIME
( 'この関数の効率はEND_TIME-START_TIME} {' F)印刷
test_time(関数func1)
test_time(関数func2)
- この関数は、実際のプロジェクトで実行される500コロンビアを嫌い嫌い、マスターが尋ねた:この機能を実行するとき、それは機能の効率をテストするために同時に実行されます。
インデックスDEF():
time.sleep(2)
('ブログホームパークへようこそ')を印刷
インデックス()
test_time DEF(X):
time.time =()START_TIME
X()
END_TIME = time.time()
プリント(F 'は、この関数の効率{END_TIME-START_TIMEを}')
test_time(インデックス)
問題の4バージョン:満足開放性の原則は、原則を閉じて:オリジナル機能、および呼び出しのソースコードを変更しないでください。閉鎖の原則の違反:機能の変更が呼び出されます。
バージョン5:あなたは、元の関数(クロージャ)を呼び出す方法を変更することはできません:
DEFインデックス():
time.sleep(2)
印刷(「ブログホームパークへようこそ」)
インデックス()
func1のDEF():
time.sleep(2)
印刷( 'ウェルカムホーム日記')
test_time DEF(X):X =指数
DEFインナー():
START_TIME time.time =()
X()
)(= time.timeをEND_TIME
( 'この関数の効率はEND_TIME-START_TIME} {' F)印刷
リターンインナー
インデックスtest_time =(インデックス)
インデックス()
@デコレータシンタックスシュガー・プラス・ファンクション名
DEF F():
印刷(666)
F = '白'
印刷(F)
test_time DEF(X):X =指数
DEFインナー():
START_TIME time.time =()
X()
time.time =()END_TIME
( 'この関数の効率END_TIME-START_TIME} {' F)印刷
リターンインナー
インデックス= test_time @test_time(インデックス)
DEFインデックス():
time.sleep(2)
('ブログホームパークへようこそ')を印刷
指数= test_time(インデックス)
インデックス()
func1のDEF():
time.sleep(2)
印刷( 'ウェルカムホーム日記')
@test_timeの
DEFの関数func2():
time.sleep(1)
印刷( 'ホームを見直しへようこそ')
関数func2 = test_time(関数func2)
FUNC3 = test_time(FUNC3)
関数func2()
バージョン6:装飾された関数の復帰
DEFのtest_time(X):X =指数
DEFインナー():
time.time =()START_TIME
RET = X()
(:RET {}「F'ret)プリント
END_TIME =時間。時間()
印刷(F 'この関数END_TIME-START_TIME} {効率')
リターンRETの
復帰インナー
インデックス= test_time @test_time(インデックス)
DEFインデックス():
time.sleep(0.5)
('ブログホームパークへようこそ')を印刷
Trueを返し
印刷(インデックス())、内側( )
あなたは真のインデックス()ように、それは完璧ですが、あなたは完全に元の関数の使用を変更しないので、もし今指数は、内部であるに戻って確認する必要がありますが、印刷する(インデックス()) - - >真
バージョン7:かどうかをプラスデコレータずに、「Taibaijinxing」のあなたの引数はパラメータnに渡される装飾的な関数パラメータ、、。6達成することができないが、バージョンパラメータ渡し、インデックス(「Taibaijinxing」)==内(「Taibaijinxing」)
test_time DEF(X):X =指数
DEFインナー(引数、kwargsから):
定義された関数:*重合。
引数=( 'りんご')
(1 ,. 3)のargs =は
time.time =()START_TIME
RET = X(引数、kwargsから)
:*の機能を実行休憩を。
X = RET( ('リンゴ'))== X( 'リンゴ')
RET = X((1 ,. 3))== X(1,3)
プリント(F'ret:RET {}「)
END_TIME = time.time()
('この関数の効率END_TIME-START_TIME} {' F)印刷
リターンRETの
復帰インナー
インデックス= test_time @test_time(インデックス)
DEF指数(N-):
time.sleep(0.5)
を印刷(F '{n}はアクセスホームパークをブログにようこそ')
Trueを返し
@test_timeインデックス= test_time(インデックス)
デフ関数func2(A、B):
time.sleep(0.5)
プリント(F '最终结果:{A + B})
+ bを返します
印刷(インデックス( 'りんご'))、内側( 'りんご')
印刷(func2を(1,3))==インナー(1,3)
warpper DEF(F):
DEFインナー(* argsを、** kwargsから):
'装飾機能の前に作動させる' '' ''
印刷(666)
RET = F(* argsを、** kwargsからは)
機能を装飾するために」 ''操作「」「の後に
印刷(」完成「)
リターンRETの
復帰インナー
@warpper
:DEF FUNC()
印刷(111)
FUNC()
FUNC()
FUNC()
FUNC()
FUNC()
アプリケーションデコレータ:元と呼び出しに本来の機能を変更することなく、その追加機能。
ログイン認証、印刷ログ。