@Scrazy
2016-02-15T08:34:29.000000Z
字数 1407
阅读 860
python学习笔记
基于函数的decorator
def decorator(F):
def new_F(a, b):
print('input:', a, b)
return F(a, b)
return new_F
@decorator
def square_sum(a, b):
return a**2 + b** 2
@decorator
def square_diff(a, b):
return a**2 - b** 2
print(square_sum(3, 4))
print(square_diff(3, 4))
运行
/usr/bin/python3.4
input: 3 4
25
input: 3 4
-7
当然也可以两个装饰器一起使用
函数的执行顺序由@decorator
的顺序决定
def decorator(F):
def new_F(a, b):
print('input:', a, b)
return F(a, b)
return new_F
def decorator1(F):
def new_F(a, b):
print('This is key')
return F(a, b)
return new_F
@decorator
@decorator1
def square_sum(a, b):
return a**2 + b** 2
@decorator1
@decorator
def square_diff(a, b):
return a**2 - b** 2
print(square_sum(3, 4))
print(square_diff(3, 4))
运行
/usr/bin/python3.4
This is key
input: 3 4
25
input: 3 4
This is key
-7
带参数的decorator
#新的包装层
def pre_str(pre=''):
#以前的decorator
def decorator(F):
def new_F(a, b):
print(pre + ' :input', a, b)
return F(a, b)
return new_F
return decorator
@pre_str('Lambda')
def square_sum(a, b):
return a**2 + b**2
@pre_str('Alpha')
def square_diff(a, b):
return a**2 - b**2
print(square_sum(3, 4))
print(square_diff(3, 4))
运行
/usr/bin/python3.4
Lambda :input 3 4
25
Alpha :input 3 4
-7
跳过
def decorator(aClass):
class newClass:
def __init__(self, age):
self.total_display = 0
self.wrapped = aClass(age)
def display(self):
self.total_display += 1
print("total display", self.total_display)
self.wrapped.display()
return newClass
@decorator
class Bird:
def __init__(self, age):
self.age = age
def display(self):
print("My age is",self.age)
eagleLord = Bird(5)
for i in range(3):
eagleLord.display()