デコレータと名前空間

デコレータ:

以前の同様の機能コードを直接変更して、必要な新しい機能を完成させることはできますが、いくつかの問題が発生します
。1。変更が多い場合、変更がより面倒になります
。2。その後のメンテナンスに役立たない
3.違反オープン及び(OCP、O:オープン、C:クローズ、P:原理)コードを書くの近く原理は、
プログラムが展開されたとき、プログラムは(ソースコードを変更せずにプログラムが機能追加された)改変することができないことである
を通じてデコレータ、ソースコードを変更せずに新しい機能を導入できます

def s(a,b):
    print(a,'+',b,'=',a+b)
# s(10,20)
def m(a,b):
    print(a,'*',b,'=',a*b)
# m(11,22)
def new(n,a,b):
    print('开始计算')
    r = n(a,b)
    print('计算结束')
    return r
p = new(m,11,22)

カスタム関数sとmは、それぞれ2つの数値の加算と減算を計算していることがわかります。新しい関数をカスタマイズすることにより、これら2つの関数を呼び出すときに計算の開始と終了を出力できます。

def s(a,b):
    print(a,'+',b,'=',a+b)
# s(10,20)
def m(a,b):
    print(a,'*',b,'=',a*b)
# m(11,22)
#fun:调用的或者旧的函数
def a(fun):
    def e(a,b):
        print("计算开始")
        r = fun(a,b)
        print("计算结束")
        return r
    return e
z = a(m)
s = z(1,2)

関数を設定すると、仮パラメータを* a、** bに設定できるため、さまざまな実パラメータを受け取るのに便利です。
開発では、プログラムの拡張はデコレータを介して実行されます。

名前空間

名前空間:変数を保存するために特別に使用される辞書
。locals()を使用して現在の関数スコープの名前空間を取得します。戻り値があります。辞書を返す場合、
ここに画像の説明を挿入locals()を使用して名前空間にキーと値のペアを追加できます。 、これはグローバルに相当します変数を作成しました

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_51864831/article/details/109845794
おすすめ