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

     

  • 相关阅读:
    PHP获取数组最大值下标的方法
    [转]SpeedPHP微信接口扩展
    SSL证书部署
    Windows server 2003+IIS6+PHP5.4.45环境搭建教程
    运行PHP出现No input file specified错误解决办法
    转载-lvs官方文档-LVS集群中的IP负载均衡技术
    转载-lvs官方文档04-LVS集群的负载调度
    官方文档-Linux服务器集群系统(一)
    转载-lvs官方文档-Linux服务器集群系统(二)
    linux系统参数统计脚本
  • 原文地址:https://www.cnblogs.com/yycc/p/7240414.html
Copyright © 2011-2022 走看看