需求:
写一个函数foo(x, y),返回x,y的积
写一个装饰器deco,使函数foo(x,y) 的结果非负,如果结果为负,返回0

1
2
3
4
5
6
7
# 装饰器的结构
# 装饰器一进一出都是函数,进的是func,出的是wrapper
def deco(func):
'''装饰器docstring'''
def wrapper(*args, **kwargs):
pass
return wrapper

上面是最简单的装饰器,还没有功能。下面继续完善

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def deco(func):
'''确保被装饰函数的结果是一个非负值'''
def wrapper(*args,**kwargs):
result = func(*args, **kwargs)
if result < 0:
return 0
else:
return result
return wrapper

@deco
def foo(x,y):
return x*y

print(foo(3, 7)) # 21
print(foo(3, -7)) # 0