• 装饰器案例由来例子


    1、原始的foo函数功能

    def foo():
      print 'in foo()'

    foo()

    ================================================================================

    2、现在需要增加print花费了多长时间,改写函数

    import time

    def foo():

      start = time.clock()
      print 'in foo()'

      end = time.clock()

        print "used ",end-start

    foo()

     ================================================================================

    3、第2个改变了原有函数,不变原函数内容

    写代码要遵循开发封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即:

    • 封闭:已实现的功能代码块
    • 开放:对扩展开发

    如果将开放封闭原则应用在上述需求中,那么就不允许在原函数的内部进行修改代码

    import time

    def foo():
      print 'in foo()'

    def timeit(func):
      start = time.clock()
      func()
      end =time.clock()
      print 'used:', end - start

    timeit(foo)

     ================================================================================

    4、第3个函数没变,但是调用变了,这里将调用也不变

    #-*- coding: UTF-8 -*-
    import time

    def foo():
      print 'in foo()'

    # 定义一个计时器,传入一个,并返回另一个附加了计时功能的方法
    def timeit(func):
      # 定义一个内嵌的包装函数,给传入的函数加上计时功能的包装
      def wrapper():
        start = time.clock()
        func()
        end =time.clock()
        print 'used:', end - start
      # 将包装后的函数返回
      return wrapper

    foo = timeit(foo)
    foo()

     ================================================================================

    5、使用python糖@timeit 取代 foo = timeit(foo)

    import time

    def timeit(func):
      def wrapper():
        start = time.clock()
        func()
        end =time.clock()
        print 'used:', end - start
      return wrapper

    @timeit
    def foo():
    print 'in foo()'

    foo()

     

  • 相关阅读:
    [SCOI2005]互不侵犯
    数据结构例题2
    CF1009F Dominant Indices
    BZOJ2054 疯狂的馒头
    数据结构例题1
    HDU5709 Claris Loves Painting
    CF765F Souvenirs
    Luogu P2839 [国家集训队]middle
    Luogu P2154 [SDOI2009]虔诚的墓主人
    计蒜客NOIP模拟赛(2) D2T2紫色百合
  • 原文地址:https://www.cnblogs.com/yycc/p/7240414.html
Copyright © 2020-2023  润新知