アクセサリーとクローズドパッケージ

960 ワード

クローズドパッケージ
内層関数は、外層関数のパラメータを呼び出し、閉包と呼ばれる内層関数を返します.
デコレーション
@はアクセサリーの記号
装飾器は閉パッケージの一種の利用であり、内層関数は外層関数のパラメータを呼び出し、内層関数を返し、閉パッケージと呼ばれ、呼び出したパラメータを関数に変え、装飾器であり、pythonでは関数も対象としているため、装飾器という特殊な使い方がある.
パラメータのある装飾器は、外の層に閉包を加えることです.
たんじゅんかざり
import logging
def use_logging(func):
    def warper(*args,**kwargs):
        logging.warn("%s is running"%func.__name__)
        return func(*args)
    return warper

@use_logging

def foo():
    print("i am foo!")

if __name__ == "__main__":
    foo()
パラメータ付きアクセサリー
import logging

def use_logging(level):
    def decor(func):
        def warper(*args,**kwargs):
            if level == "warn":
                logging.warn("{0} is running".format(func.__name__))
            return func(*args)
        return warper
    return decor

@use_logging(level="info")
def foo():
    print("i am foo!")

foo()