Python——初识装饰器

在实际应用中,对源代码修改封闭,对扩展开放,所以我们不能在函数内部直接添加时间模块,进而求出运行时间。只能在外部进行扩展。但是我们调用函数时,不能修改调用函数的方式。因此我们采用装饰器的方式来进行调用。

具体代码看下图:

#首先定义时间的模块
 import time

#写一个加法器函数
 def add(a,b):
     print(a+b)

#随便写一个函数
 def foo():
     print('hello')
     time.sleep(2)

#写一个关于看某个函数所运行的时间函数
 def show_time(f):
     def inner():
             first = time.time()
             f()
             end = time.time()
             print('spend %s'%(end-first))
     return inner


#当他人大量使用某个公共模块时,你不能修改调用的方法
 foo = show_time(foo)
 foo()
#                 hello
#                 spen 2.001201868057251


 @show_time              #与上面的foo = show_time(foo)相等,这就是一个装饰器
 def text():
     print('You are a student')
     time.sleep(3)

 text()              #当执行这段代码时,直接去执行inner函数
#结果            You are a student
#所需的时间       spen 3.001455307006836

在上面的程序中,当我们执行程序时,例如 “ text() ” 这个时,其实已经先不执行原来的函数模块,这是因为在上面我们定义了@show_time,而这个帮我们所做的事情就是当执行业务逻辑text()时,帮我们从执行原来的函数块到执行inner()函数块

posted @ 2018-11-07 17:09  Xa_L  阅读(53)  评论(0编辑  收藏  举报