zoukankan      html  css  js  c++  java
  • Python函数装饰器

     1 import time
     2  
     3  
     4 #装饰器函数
     5 def show_time(f):
     6     def inner():
     7         start = time.time()
     8         f()
     9         end = time.time()
    10         print('spend %s'%(end-start))
    11     return inner
    12  
    13  
    14 #通过@show_time调用
    15 @show_time
    16 def bar():
    17     print('bar...........')
    18  
    19 def foo():
    20     print('foo...')
    21  
    22 foo()
    23 # bar=show_time(bar)
    24 bar()

    装饰器类似与上面,先编写函数的功能模块

    通过@showtime来完成函数的功能追加

    @showtime作用其实就是调用上面的闭包函数show_time

     上面的函数都是不带参数的函数装饰器,那么如果调用的函数有参数,并且函数个数不确定呢,可以参考下面的例子:

     1 def show_time(f):
     2     def inner(*x,**y):
     3         start = time.time()
     4         f(*x,**y)
     5         end = time.time()
     6         print('spend %s'%(end-start))
     7     return inner
     8  
     9 @show_time
    10 def add(*x,**y):
    11     total=0
    12     for temp in x:
    13         total+=temp
    14     print(total)
    15  
    16  
    17 # foo()
    18 # bar=show_time(bar)
    19 bar()
    20  
    21 add(1,5,3,6,2,4)

    如果装饰器中需要添加部分其他扩展的功能,可以给装饰器带上参数,如下:

     1 import time
     2  
     3 def logger(flag=''):
     4     def show_time(f):
     5         def inner(*x,**y):
     6             start = time.time()
     7             f(*x,**y)
     8             end = time.time()
     9             print('spend %s'%(end-start))
    10             if flag == 'true':
    11                 print('日志记录')
    12         return inner
    13     return show_time
    14  
    15 @logger('true')
    16 def bar():
    17     print('bar...........')
    18  
    19 @logger('true')
    20 def add(*x,**y):
    21     total=0
    22     for temp in x:
    23         total+=temp
    24     print(total)
    25  
    26 @logger()
    27 def foo():
    28     print('foo...')
    29 # foo()
    30 # bar=show_time(bar)
    31 #bar()
    32  
    33 add(1,5,3,6,2,4)
    34 foo()
  • 相关阅读:
    RGB空间与HSV空间的相互转换(C++实现,修正网上大多数的代码错误)
    SLIC superpixel实现分析
    开发自己PHP MVC框架(一)
    C++ 直方图匹配算法代码
    准确率与召回率
    Github干货系列:C++资源集合-
    ezw证件照芯片压缩算法
    格拉姆-施密特正交化
    [轉]sendpage漏洞分析 CVE-2009-2692
    ptrace
  • 原文地址:https://www.cnblogs.com/softtester/p/11583196.html
Copyright © 2011-2022 走看看