标签:war 语法 aaaaa int 格式 tar 简单的 影响 未来
装饰器的本质就是一个闭包函数,因此具有闭包函数的一切功能。可以在不改变原代码的情况下,在这个函数上扩展功能。
装饰器就是为了扩展其他函数功能而添加的函数。
举个最简单的例子:
import time
def func1():
print(‘in func1‘)
def timer(func):
def inner():
start = time.time()
func()
print(time.time() - start)
return inner
func1 = timer(func1)
func1()
然而大家可以看出,在使用装饰器时的赋值非常麻烦,每用一次就要进行一次赋值。为了解决这个问题就引入了一个新的概念:语法糖。
import time
def timer(func):
def inner():
start = time.time()
func()
print(time.time() - start)
return inner
@timer #==> func1 = timer(func1)
def func1():
print(‘in func1‘)
func1()
大家可以看出,只要在定义一个函数的时候在上面紧贴的位置加一个@解释器的结构就可以在调用函数的时候直接加上了,是不是非常方便?接下来引入三个概念
def timer(func):
def inner(a):
start = time.time()
func(a)
print(time.time() - start)
return inner
@timer
def func1(a):
print(a)
func1(1)
import time
def timer(func):
def inner(*args,**kwargs):
start = time.time()
re = func(*args,**kwargs)
print(time.time() - start)
return re
return inner
@timer #==> func1 = timer(func1)
def func1(a,b):
print(‘in func1‘)
@timer #==> func2 = timer(func2)
def func2(a):
print(‘in func2 and get a:%s‘%(a))
return ‘fun2 over‘
func1(‘aaaaaa‘,‘bbbbbb‘)
print(func2(‘aaaaaa‘))
import time
def timer(func):
def inner(*args,**kwargs):
start = time.time()
re = func(*args,**kwargs)
print(time.time() - start)
return re
return inner
@timer #==> func2 = timer(func2)
def func2(a):
print(‘in func2 and get a:%s‘%(a))
return ‘fun2 over‘
func2(‘aaaaaa‘,‘bbbbbb‘)
print(func2(‘aaaaaa‘))
任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改。所以我们必须允许代码扩展、添加新功能。
因为我们写的一个函数,很有可能已经交付给其他人使用了,如果这个时候我们对其进行了修改,很有可能影响其他已经在使用该函数的用户。
def timer(func):
def inner(*args,**kwargs):
‘‘‘执行函数之前要做的‘‘‘
re = func(*args,**kwargs)
‘‘‘执行函数之后要做的‘‘‘
return re
return inner
def pipixia(func):
def inner():
print(‘wrapper1 ,before func‘)
func()
print(‘wrapper1 ,after func‘)
return inner
def qqxing(func):
def inner():
print(‘wrapper2 ,before func‘)
func()
print(‘wrapper2 ,after func‘)
return inner
@qqxing
@pipixia
def f():
print(‘in f‘)
f()
这个过程就像是一层套一层一样,一层层的执行
标签:war 语法 aaaaa int 格式 tar 简单的 影响 未来
原文地址:http://www.cnblogs.com/XiaoBoya/p/7258915.html