デコレータ:
以前の同様の機能コードを直接変更して、必要な新しい機能を完成させることはできますが、いくつかの問題が発生します
。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()を使用して名前空間にキーと値のペアを追加できます。 、これはグローバルに相当します変数を作成しました