2017-01-09 46 views
3

我是使用timeit模塊的新手,並且我很難獲取多行代碼片段在timeit內部運行。如何在Python時間內使用其他的東西

什麼工作:

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

您提供的字符串被解釋爲一個源代碼,所以你可以使用多串三引號,像

>>> 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 
0

記住約的條件表達式:<true val> if <condition> else <false val>

當與timeit用它可能看起來

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

注:

  • 這個示例將工作在python3中,我想用print作爲函數,因爲它是最簡單的。當然你也可以在from __future__ import print_function p2.x
  • 這個例子顯然會作爲輸出* itload OD「真」 S,要小心,同時運行它
0

這段代碼工作,你所希望的方式:

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

一定是新行

0

我的答案找到了答案內的存在this question.

呦ü需要有一個新的生產線在ifelse之間,所以它的工作原理做

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