如何在Python的timeit中使用else

时间:2017-01-09 18:13:30

标签: python timeit

我是使用timeit模块的新手,而且我很难在时间内运行多行代码片段。

什么有效:

timeit.timeit(stmt = "if True: print('hi');")

什么行不通(这些都无法运行):

timeit.timeit(stmt = "if True: print('hi'); else: print('bye')")
timeit.timeit(stmt = "if True: print('hi') else: print('bye')")
timeit.timeit(stmt = "if True: print('hi');; else: print('bye')")

我发现我可以使用三引号来封装多行代码段,但我只想在一行上键入。

有没有办法在timeit中的一行内使用else语句?

4 个答案:

答案 0 :(得分:4)

您提供的字符串被解释为源代码,因此您可以使用带有三个引号的多行字符串,例如

>>> timeit.timeit(stmt = """if True: 'hi'
... else: 'bye'""")
0.015218939913108187
换行符

\n(但看起来很混乱)

>>> timeit.timeit(stmt = "if True: 'hi'\nelse: 'bye'")
0.015617805548572505

如果只需要一个分支,也可以使用三元if-else条件(因此不需要换行):

>>> timeit.timeit(stmt = "'hi' if True else 'bye'")
0.030958037935647553

答案 1 :(得分:0)

请记住条件表达式:<true val> if <condition> else <false val>

与timeit一起使用时,它可能看起来像

timeit.timeit("print('true') if 2+2 == 4 else print('false')")

注意:

  • 这个例子可以在python3中使用,我想使用print作为函数,因为它最简单。当然,你可以在p2.x
  • from __future__ import print_function
  • 这个例子显然会输出一个s * itload od&#34; true&#34; s,运行时要小心

答案 2 :(得分:0)

此代码将按您希望的方式运行:

timeit.timeit("""
if True: print('hi')
else: print('bye')
""")

必然存在新行

答案 3 :(得分:0)

我的回答是在this question.

的答案中找到的

您需要在ifelse之间添加一个新行,因此可以这样做

timeit.timeit(stmt = "if True: print('hi');\nelse: print('bye')")