python运行时间计算之timeit

timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000)

  stmt:statement,即使要执行的东西

  setup:赋值予stmt中某些不明确的变量对象,如果stmt已经足够明确了,那就可以省略

  timer:

  number:运行的次数

e.g1:setup是如何用的

  >>> import timeit
  >>> timeit.timeit('char in text', setup=' text = "sample string"; char = "g" ')    #此地就是setup分别对stmt中的char与text两个变量赋予了值,注意,多附值语句用’;‘相隔
    0.41440500499993504
  >>> timeit.timeit('text.find(char)', setup=' text = "sample str"; char = "g" ')
    1.7246671520006203

e.g2:如何运行一段字符串型代码

  >>> s = """\
  ... try:
  ... str.__bool__
  ... except AttributeError:
  ... pass
  ... """
  >>> timeit.timeit(stmt=s, number=100000)
    0.9138244460009446
  >>> s = "if hasattr(str, '__bool__'): pass"
  >>> timeit.timeit(stmt=s, number=100000)
    0.5829014980008651

e.g3:如何运行函数以及类的方法

  运行函数:

    IDE中:

      s="""
      def multinumber(a,b):
        return a*b
      """

      print( timeit.timeit('multinumber(3,4)', setup= s) )

    命令行中:

      >>> timeit.timeit( "f()" , """
      ... def f():
      ...   pass
      ... """ )
      0.13721893899491988

  运行类方法:

    IDE中:

    s="""
    class SomeClass:
     def method(self):
      pass
    """     print(timeit.timeit( "SomeClass().method", s ))

    命令行中:

      >>> timeit.timeit( "obj.method()", """
      ... class SomeClass:
      ...   def method(self):
      ...     pass
      ... obj= SomeClass()        #注,此setip中即完成了类定义,还完成了赋值
      """)
        0.1980541350058047

其中用的最多应该就是.eg3了,因为大量情况下我们需要用它来看一个函数的运行时间,或者是用类实现了一种数据结构类型,查看其各种方法的时间

上一篇:iPhone10.3.X越狱后SSH连接不上的问题(已解决)


下一篇:C#本期本周的算法