Pythonのデコレータは、機能のために元の関数の機能拡張で、この機能の特別な機能は、それが関数の戻り値があるということです、Pythonのデコレータを使用する利点は、新たな機能を追加するために、元の関数の前提の下で、コードに変更はありません機能。
3.1定義デコレータ、定義された関数。
デフXXX():
関数本体
デコレータの3.2アプリケーション
の機能は、メソッドに、@xxxを使用する必要があります。
注:内部関数デコレータ:限りアプリケーションデコレータ関数として、関数を再定義する、として再定義されます。
何のデコレータの典型的なパラメータを含んでいません。
1 DEF 外側(FUNC):
2 DEF 内():
3 プリント(' こんにちは' )
4 の印刷(' こんにちは' )
5 プリント(' こんにちは' )
6 #の原F1の函数
7 R = FUNC() #1 、R =なし
8 印刷(' 末端' )
9 プリント(' 末端' )
10 プリント(' 末端' )
11。 retureのR&LT
12は retureインナー
13である
14 @outer
15 DEF F1():
16 リターン " F1 "
。17
18である F1() #の発信者
19。
20 #原理:
21 #1、外側の関数を実行する関数名と以下、パラメータ、すなわちF1 = FUNCとして
22は #2、外側の戻り値F1 =外側の戻り値に再割り当て
23 #3、新しいF1関数は=インナー
24
25 "" "
26は 出力:
27 こんにちは
28 ハロー
29 こんにちは
30 F1
31 の端部
32 の端部
33 の端部
34 ""」
デコレータは、2つの例示的なパラメータを通過しました。
1 def outer(func):
2 def inner(a1, a2): #传递两个参数
3 print("123")
4 ret = func(a1, a2) #传递两个参数
5 print("456")
6 return ret
7 reture inner
8
9 @outer
10 def index(a1, a2):
11 print("操作很复杂")
12 return a1 + a2
13
14 index(1, 2) #调用者
装饰器含N个参数的函数示例:
注意:一个函数是可以应用多个装饰器。多个装饰器时先执行最外层的装饰器。
1 def outer(func):
2 def inner(*arg, **kwargs): #可接收多个参数
3 print("123")
4 ret = func(*arg, **kwargs) #可接收多个参数
5 print("456")
6 return ret
7 reture inner
8
9 @outer
10 def f1(arg): #传递一个参数
11 print("我传递了一个参数")
12 reture "f1"
13
14 @outer
15 def index(a1, a2): #传递两个参数
16 print("我传递了一个参数")
17 return a1 + a2
18
19 @outer
20 def f2(a1, a2, a3):
21 print("我传递三个参数")
22 return "f2"
23
24
25 f1(123) #调用者传递一个参数
26 index(1, 2) #调用者传递两个参数
27 f2(1, 2, 3) #调用者传递三个参数