2016-03-07 72 views
0

我正在使用魔術%% timeit函數來獲取執行某些代碼所需的時間。困擾我的事情是,當我運行%% timeit時,我沒有得到結果。對於instace:魔法函數timeit

a=5 
b=3 

%%timeit 
c = a + b 

現在,如果我想在未來的電池使用C,我得到的是c尚未確定。

print(c) 
>>>NameError: name 'c' is not defined 

你能幫我理解爲什麼會發生這種情況,爲什麼在特定單元格中使用魔術%% timeit函數時,c不會被存儲?

+0

「細胞」?你的意思是「線路」? 「聲明」? 「變量」? – deceze

+0

啊,貌似你在談論IPython ......!? – deceze

+0

是的,我應該說清楚,我正在使用IPython/Jupyter python 3.5 – MarcoQ

回答

2

當您使用%%timeit的時間代碼時,您提供的代碼在單獨的名稱空間內執行,因此其效果對您的環境不可見。

+0

好吧,我看到它是一個不同的命名空間,但我不知道我明白爲什麼,它有什麼好處? 我寫作c = a + b的要點是計算c。爲什麼它必須把它帶到不同的命名空間,以便我不會得到結果? – MarcoQ

+0

您必須閱讀'timeit'庫代碼以獲得詳細信息 - 我可以告訴您發生了什麼,但不是爲什麼。 – holdenweb

+0

'timeit'可能會多次運行你的代碼,甚至數千次。在你的例子中,我得到'10000000個循環,最好是每個循環3:55.6 ns'。通常我運行一次表達式來檢查值,然後使用'timeit'來測試性能。 – hpaulj

0

細胞模式:

%%timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] setup_code code code... 

在小區模式中,在第一行中的語句被用作設置代碼 (執行,但未到時間)和電池的體被定時。單元格 正文可以訪問在設置代碼中創建的任何變量。

https://ipython.org/ipython-doc/3/interactive/magics.html#magic-timeit

你在細胞模式下執行,而行僅僅是設置代碼;這意味着它並沒有實際計時,其結果只能通過它後面的單元代碼訪問。