p0011 装饰器

1
2
3
4
5
6
7

def (x):
return x*x

def (x):
return x*x
square = trace(square)
1
2
3
4
5
6
7
enableTracing = True
if enableTracing:
debugLog = open("debug.log","w")

def trace(func):
if enableTracing:
def callf(*args,**kwargs):

Example1:简单的装饰器

1
2
3
4
5
6
7
8
9
10
11
12
def wai(obj):
def nei():
print("这是增加的功能")
return obj()
return nei

@wai
def func():
print("这是原始的功能")
return "哈*3"

print(func())

Example2:被装饰函数带参数

1
2
3
4
5
6
7
8
9
10
11
12
# 海拔装饰
def dlevation(obj):
def wrapper(temp):
return obj(temp + 100)
return wrapper

@dlevation
def tree(temp):
return temp

res = tree(123)
print(res)

Example3:装饰器函数带参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
enableTracing = True

if enableTracing:
debugLog = open("debug.log","w")

def trace(func):
if enableTracing:
def callf(*args,**kwargs):
debugLog.write("Calling %s: %s,%s n" % (func.__name__, args,kwargs))
r = func(*args,**kwargs)
debugLog.write("%s returned %sn" % (func.__name__, r))
debugLog.close()
return r
return callf
else:
return func


def (*args,**kwargs):
print(1)

square(1,2,3,a = 1,b = 2,c =3)


#Calling square: (1, 2, 3),{'c': 3, 'a': 1, 'b': 2}
#square returned None