プログラムコードは、長い時間のために書かれた猿のように、この名前を聞いたことが、私はおかしいと感じ、自身が包まシャットダウン、自閉症になります。
クロージャーは、元々設計された他の機能と巧みにいくつかの機能を追加するために他の機能を変更しないために、機能の特別なクラス、これらの関数を意味しました。
賢いどこにありますか?素晴らしいどこにありますか?私たちは今、次のシナリオを見てみましょう。
次のように私はヨーロッパの小さな会社の機能を書きました:
1 DEF )(言う: 2 印刷(「上司が2品です」)
あなたは、それを推測し実行しているライブラリを削除する準備ができて小さなヨーロッパ、そして最終的にこのSikouの所有者を投げる、限りプログラムは、企業の重要な機能を実行しているように表示される「ボスは2品で、」彼は、道を考え
だけ巧みに神秘的な目的を達成するために、偽装したパケットを、閉じた機能で、会社のプログラムインチ したがって、上記のコードの小さなヨーロッパは静かに下方修正します。
1 DEFグッドマン(楽しい): #これは小さなヨーロッパの閉鎖のためのコードを記述することである 2 DEF(引数、** *言うkwargsから): 3 印刷(" 上司が2品である" ) 4 リターン楽しい(* argsを、** kwargsから) 5 リターン言う 6。 7。 8。 DEFの num_sum(B):#1 会社の最も重要な機能 。9 リターン A + B 10 。11 num_sum =グッドマン(num_sum) #関数変装 12は 13である = num_sum(1、2。 ) 14 印刷(A) 15 16の #結果: 17 ボスは、2件の商品であり、 18 3
ヨーロッパの強みは、彼はキーボード入力が消耗されたすべての時間を感じたので、彼は彼の「犯罪」労力を軽減するためにデコレータを使用し、少し怠惰です。
#操作簡略化する小王デコレータ @goodmanの#プラス@goodman == "(num_sum)num_sum =グッドマン" ほんのいくつかのより少ない書かれた単語に機能 DEFの:num_sum(A、B) を返す A + Bを = num_sum(1、2 ) 印刷(A) #結果: ボスは2品である 3
上司は一つだけであるように、小さなヨーロッパでは、プログラムを使用して、十分ではない感じのクールな、より多くの、暗所に保管。
図1は、 DEFチェック(名): #は、その後ログインボスかどうか層のテストを定めて 2 DEF グッドマン(楽しい): 3 DEF(* argsを、**言うkwargsから): 4 IF名=!" BOSS ":#そうでない場合はログは、上司の上司が2品である表示 "5 印刷(" 上司が2品である" ) 。6 リターン楽しい(* argsを、** kwargsから) 。7 リターンは言う 。8 リターン・グッドマン 。9 10 @Check(名前= " BOSS " ) 。11 DEFnum_sum(A、B): #会社の最も重要な機能 12は 、リターン A + B 13である 14(1、2 = num_sum ) 15 プリント(A) 16 。17 #結果: 18である。3
偉大な小さなヨーロッパの表情は、今見ることができないボスに加えて、他の人がこの文「上司は、2つの財である」を参照してくださいすることができます。
しかし、ヨーロッパの小さなはまた、より多くのように偽装するために、他のプログラムの猿、@wrapsを使用しての小さなヨーロッパの思想を認識することがますます困難と偽装するために、念頭に置いていることを保持しました
1 から functools インポートラップ#のインポートモジュールfunctoolsラップ(スーパー迷彩服) 2 3。 DEF(名)を確認: #は、ログインボスかどうか一つのテストを設定する 4。 DEF グッドマン(FUN): 5 @wraps(FUN) 。6 DEF(* argsを、**言うkwargsから): 7 のIF名=!" BOSS ":#"ボスは2品である"限り上司がショーにログオンする 8 印刷(" 上司が2品である" ) 9 印刷(。楽しい__name__)#の元の関数名を見て 10 戻る(* argsを、**楽しいkwargsから) 。11 リターンは言う 12が 返さグッドマン 13は 14 @Check(名前= " BOSS " ) 15 DEFの num_sum(A、B): #の会社の最も重要な機能 16 リターン A + B 。17 18です num_sum =(1、2 ) 。19 プリント(num_sum __name__)#1 ルック関数名変装後 20は プリント(A) 21は、 22である #の実行結果: 23である num_sum #元の関数名 24num_sum #の迷彩後の関数名 25 3
小さな画面が直面しているヨーロッパでは邪悪なにやにや笑いに直面しています。。。。。。。。。
要約:
クロージャーは実際にネストされた関数で、割り当て、割り当てそれは、本質的に閉鎖されデコレータ上のメモリとリコールにネストされた関数を話すが、デコレータそれらを呼び出し、実際には、迷彩がより適切であると呼ばれるべきです。Pythonは、コードネストされた機能の割り当てを簡素化し、そしてあなたが完璧にカモフラージュ@wraps機能ネストされた関数を使用することができますPythonは@記号で、隠された本能を装っていた、のpythonを意味します。
もちろん、Pythonの組み込みのデコレータデコレータがあります
@staticmathod
@classmethod
@property
これらは言葉です。。。。