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

     

  • 相关阅读:
    icomet研究
    python使用ssdb的队列,用于替换canal+rabbitmq
    最近关于mysql的造型,binlog使用,以及阿里云上线数据处理错误导致被处罚的思考
    删除一个存在的RabbitMQ队列
    检查Rabbitmq中队列及消息个数,还有清空的方法
    Mysql在master上查看有哪些slave
    查看Linux端口的占用及连接情况
    Kettle根据时间戳同步数据实现
    kettle的下载、安装和初步使用(windows平台下)(图文详解)
    golang学习 ----获取URL
  • 原文地址:https://www.cnblogs.com/yycc/p/7240414.html
Copyright © 2011-2022 走看看