@修飾子パイソン

「@」を変更し、次の関数の関数として引用されています。修飾された基準関数は、基準関数の戻り値は、関数が変更に戻り、関数の上方に配置されなければなりません

シンプルな栗:

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を完了したが、今回は内部テストしていません

 

テスト機能、第ラッパー出力の内部で装飾機能... 、関数の戻り値の効果の関数として参照されるべきであり、このときのテストの性質はもはや試験されていない、第二が挙げられます関数の戻り値のラッパー関数、出力はラッパー関数内のコンテンツであるので。最後に、我々は、出力関数の名前を確認します。

これは、@改質剤の役割である、鶏料理を飛んでいない、物品は、首長がエラーを歓迎している私を修正して自由に感じます。
-----------------------------------------の努力だけでなく、習慣、そしてよりそれは品質です。

 

おすすめ

転載: www.cnblogs.com/liangxiyang/p/11200476.html