12日目、関数クロージャデコレータ

閉鎖機能

レビュー:
1.関数オブジェクト:あなたは限界を破るように使用して、グローバルレベルの関数に関数の戻り内の関数を定義することができます。
2.名前空間と範囲:関数が死んで固定された定義の位相関係の範囲、および通話位置に関係なく、時間を見つけ、その関数の範囲を定義するために行く必要がある任意の位置で関数を呼び出している
定義を:関数クロージャは、関数内で実際にあり、かつ外部変数への内部参照の機能ではなく、グローバルスコープの範囲、閉鎖手段:代わりに、グローバルスコープのスコープ機能外部内部基準関数を

  • 実施形態の関数として伝送パラメータの二種類
    の形態で使用されるパラメータ1
    2つの収縮関数:パケット関数は一緒にネストされた両者の関数です。
  • アプリケーションパッケージクロージャ関数
    クロージャを意味する:機能もかかわらず、コールがそれらの外側に優先的に使用される場合の関数を作る層に包まれたスコープ機能の外に、オブジェクトだけでなく、関数オブジェクトを返しますパッケージの範囲。

アプリケーション:遅延計算(私たちは質量参加している、そして今、私たちが包まれていることが判明)、爬虫類フィールド。

デコレーター

1.デコレータである何
、この時間はデコレータを使用する機能がある場合、我々はその機能を拡張するために、この機能を変更するための根拠を持っていない、デコレータの価値は、このように定義し、デコレータオブジェクト追加機能に追加されますデコレータは関数の定義であるが、関数の機能は、他の関数に機能を追加するために使用されます

  • デコレータ自体は実際に呼び出すことができる任意のオブジェクトにすることができます
  • 装飾オブジェクトは、任意の呼び出し可能オブジェクトすることができ

デコレータを使用する理由2.
装飾で、この時間は、我々はすでにライン上のプロジェクトを持っている場合、我々は方法を変更したい、ので、この方法は、多くの場所で使用することができる、問題になりやすいの悪い変化するので、方法を変更せず,,それでは、他の機能に拡張することができ、かつオリジナルのメソッド呼び出しには影響しません。
2つの原則に従わなければならデコレータを実装:
1.オブジェクトのソースコードを装飾するために変更はありません
2。装飾品が呼ばれる方法で変更されません
のでし、デコレータが実際にある前提は、上記の2つの原則に従うことで、新機能に装飾品を追加します

3.デコレータ糖衣構文は、
直接装飾機能で上回っている、と別の行に書かれている@装饰器名
装飾用テンプレート4

def deco(func):
    def wrapper(*args,**kwargs):
        res = func(*args,**kwargs)
        return res
    return wrapper

5参照デコレータを持っています

6.閉鎖層

おすすめ

転載: www.cnblogs.com/bladecheng/p/10957015.html