zoukankan      html  css  js  c++  java
  • 装饰器案例由来例子

    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()

     

  • 相关阅读:
    SQL作业的操作全
    ISAPI Rewrite 实现简单url重写、二级域名重写
    wwf mvc学习
    如何扩大内需
    惊喜
    无限级分类查询
    杂记
    20130118SQL记录
    百度调价HttpWebRequest
    检查外链的方法
  • 原文地址:https://www.cnblogs.com/yycc/p/7240414.html
Copyright © 2011-2022 走看看