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

     

  • 相关阅读:
    软件工程(2019)第二次作业
    软件工程(2019)第一次作业
    【Java基础】字面量相加的类型转换
    测试之合作篇
    功能测试之难以重现的bug
    功能测试知识之Web输入框验证
    如何编写有效的测试用例?
    Java:switch语句例子
    【转】成功的概念
    Java里的if else嵌套语句例子
  • 原文地址:https://www.cnblogs.com/yycc/p/7240414.html
Copyright © 2011-2022 走看看