「@」を変更し、次の関数の関数として引用されています。修飾された基準関数は、基準関数の戻り値は、関数が変更に戻り、関数の上方に配置されなければなりません
シンプルな栗:
1 DEF フナ(FN) 2 プリント(' A ' )出力#1 A 3 FN() #着信パラメータ出力FN Bを行う 4。 復帰 ' fkitが' #funBに戻る 5。 '' ' 6。 装飾効果以下は、と等価です。フナ(funB)、 7。 funB文の戻り値として(装飾)置換する; 8 funBのfkitようによるフナ()関数は、fkitを返し 9。 '' ' 10 @funAを 11。 DEF funB(): 12は、 印刷(' B ' ) 13は、 プリント(funB) #再度実行する出力機能がfkit funBあります
ここfunBは、機能を変更され、フナの関数参照です。@変更関数はfunBフナにパラメータとして渡され、次いでフナfunBに戻り値を返しています
この手順は2つのステップを完了することを意味します。
@funAフナ(funB)上記のコードを実行することと等価であるフナとしてfunBパラメータ()。
あるいはステップfunB実行の結果に、フナ()の実行が完了した後fkitを返さないので、もはやfunB関数であるが、文字列に置き換えられています。
次のように出力されます。
B
Fkit
もちろん、あなたはまた、以下の栗を参照してください、機能を返すことができます。
1 DEF My_Decorator(FUNC): 2 DEF warpper(): #のスキップ機能 。3 '' ' デコレータ' '' 4 プリント(' 装飾機能... ' ) 。5 プリント(' 123 ' ) 。6 リターン warpper #ラッパー関数は、テストを返す 7。 8。 9。 @my_decoratorの #のデコレータ(テスト()) 10 DEF 試験() 。11 "" " Testword " "" 12 プリント(「テスト機能」) 13である 14 15 試験() 16 プリント(「関数名:%はS 」。テスト%__name__)
次のように出力される:
123
装飾関数...
関数名:ラッパー
図から分かるように、最初の「123」は、第4行は、「の5行目の出力装飾機能...」、そして最後に、関数名の16行目、実行の筆順次のコード
9コードの最初の行が実行され、それは参照機能を実行し、基準関数はネストされた関数warpper内部戻り値であり、このネストされた関数をスキップし、5行目のランは、出力「123」。ネストされた関数をテストするための6行目を実行すると、関数を返し、その後、@改質剤の役割は、さらに、テスト関数を呼び出し、次のコードの実行ライン15を完了したが、今回は内部テストしていません
「テスト機能」、第ラッパー出力の内部で「装飾機能... 」、関数の戻り値の効果の関数として参照されるべきであり、このときのテストの性質はもはや試験されていない、第二が挙げられます関数の戻り値のラッパー関数、出力はラッパー関数内のコンテンツであるので。最後に、我々は、出力関数の名前を確認します。
これは、@改質剤の役割である、鶏料理を飛んでいない、物品は、首長がエラーを歓迎している私を修正して自由に感じます。
-----------------------------------------の努力だけでなく、習慣、そしてよりそれは品質です。