python输出运行时间表_Python编程第十二课 了解程序运行的时间
了解了程序如何運行,我們就可以讓我們寫的程序變得更快。
介紹
在前面很長一段時間,我們學習建立一個搜索索引,它可以通過一次一次地查看每個條目來響應查詢。
當搜索索引檢查關鍵字與我們要找的詞相匹配時,就會把結果打印出來。
但是,如果索引很大很大,查詢次數很多很多,這種方法就會太慢。
一個典型的商用的搜索引擎應該在一秒鐘內做出響應,甚至還會快得多。
在接下來的幾篇文章,我們將學習如何使我們的搜索索引更快。
讓事情變得更快的辦法
這幾篇文章最主要目標是讓大家了解程序的運行成本。
到此刻為止,我們還沒有擔心過這個問題,那是我們寫的都是最簡單的代碼,如果程序的代碼足夠大的時候,或者讓程序運行更多的事情的時候,我們就必須開始考慮運行它們的成本。
這個評估一個執行的成本是一個非常重要的問題,它是計算機科學的一個基本問題。有些人整個職業生涯都在研究這個問題。這就是所謂的算法分析。
在看我寫的公號過程中,你可能沒有意識到這一點,但實際你完整學習的話,已經寫了很多算法。
算法是一個輸入某些東西,然后讓計算機產生正確結果的程序。
一個程序是一個邏輯清晰的步驟序列,它可以機械地執行。
我們主要對可以被計算機執行的程序感興趣,但它之所以成為程序,重要的部分在于它的步驟是精確定義的,不需要思考就可以執行。
要成為一個算法,它必須總是完成。也就是說它必須要有輸出。
你已經看到,要確定一個算法是否總有輸出,這不是一個簡單的問題。
一般來說,不可能回答這個問題,在現實世界,你永遠無法給出下一秒的準確預測,明天的輸出需要明天到來之后,才能觀察到。
但對于計算機的程序來說,給定一個輸入,必須要有一個輸出的結果,哪怕是個錯誤的結果。
所以,一旦你有了一個算法,然后你用邏輯清晰定義了實現的步驟,那么它就會產生正確的結果。
這也意味著你可以通過統計每段過程,對它的成本進行推理。
什么是成本?
計算機科學家思考成本的方式與大多數人思考成本的方式完全不同。
當你考慮到東西的成本時,你就會知道具體的東西,比如紅車要25000元,綠車要10000元--紅車比綠車貴。
你只要比較這些成本就可以了。這是以非常具體的事物與具體的成本來思考的。
用算法就不一樣了。我們通常不會有一個具體的執行思路。成本取決于投入。
假設 算法A 和 算法B 都解決同一個問題。
輸入 算法A 輸出
輸入 算法B 輸出
你不能像汽車那樣給它們定一個固定的價格。
對于某些輸入,可能 算法A 比 算法B 便宜,但對于其他輸入,算法B 可能更便宜。
你不希望對每一個輸入都要進行計算。
在計算機科學中,成本的主要方式是以輸入的大小來談論的。
通常情況下,輸入的大小是決定算法速度的主要因素。
通俗的來說,計算中的成本是以時間如何隨著輸入的大小增加而增加來衡量。
有時,輸入的其他屬性也很重要,這在后面會提到。最終,成本總是歸結為錢。
當算法執行時,什么是需要花錢的?
完成的時間--如果它完成得更快,你就會花更少的時間在它身上。你可以按執行時間來租用電腦。有各種云計算服務,你按使用時間支付一定大小的處理器的費用。這只是幾分錢每小時。時間真的是金錢,雖然我們不需要把成本變成金錢,因為我們可能不知道確切的計算成本,但了解執行時間就能很好地了解成本。
內存--如果執行一個算法需要一定的內存,那么你就可以知道運行程序所需的計算機大小和成本。
總而言之,成本是以時間和記憶而不是以金錢來談論的;盡管這些的實際實施確實會轉化為實際的金錢成本。時間往往是成本的最重要方面,但記憶也是另一個考慮因素。
為什么計算機科學家專注于測量時間隨輸入大小而變化,而不是絕對時間?
a我們想在運行一個程序之前,預測它的執行時間。
b我們想知道隨著計算機的速度越來越快,時間將如何變化。
c我們想了解算法的基本屬性,而不是特定輸入或機器的東西。
d我們想要抽象的答案,所以它們永遠不會錯。
e縱觀整個計算的歷史,一年后用同樣的錢能買到的計算機會比今天能買到的計算機快。
程序運行的時間
下面我們將學習如何檢查一段代碼運行所需的時間。
下面的存儲過程time_execution就是一種評估代碼執行所需時間的一種方法。
你可以嘗試用秒表來做,但是為了準確,你必須運行程序很長時間。
使用 time 時間庫中內置的 time_execution() 更準確。代碼后面有注釋。
import time #這是一個Python庫
def time_execution(code):
start = time.monotonic() # 啟動時鐘,返回的時鐘的浮點數值
result = eval(code) # 把任何字符串當作Python命令來計算。
run_time = time.monotonic() - start # 找出開始時間和結束時間的差異。
return result, run_time # 返回代碼結果和所需時間
Jupyter中的執行過程:
時鐘已經啟動。它開始時讀取的時間有些隨意,但這并不重要,因為你只對它開始和停止的時間差感興趣,而不是絕對的開始和結束時間。
時鐘啟動后,你要評估的代碼會被執行。這是由相當令人興奮的方法eval('code')完成的。它允許你以字符串的形式運行任何輸入的代碼!你輸入一個字符串,它就會運行。
你輸入一個字符串,它就會把它作為 Python 代碼運行。例如,eval('1 + 1') 運行代碼 1 + 1。
代碼執行完畢后,時鐘停止,計算開始和停止時間的差值,并存儲為run_time。
最后,過程在eval中返回代碼的結果及其運行時間。
你可以通過web解釋器來運行計時,但它不會是準確的,而且你的代碼在那里運行的時間是有限制的。
如果你的電腦上安裝了Python,你就可以在上面運行。
如果你還沒有安裝Python,盡快安裝。
只要動手自己做一遍,才是最快速的學習方式。
上面的輸出代碼都是Frankie在他的Mac anaconda里的Jupyter notebook中運行的。
回顧一下,time_execution 的輸入 "1 + 1",被作為輸入發送給 eval ,然后它以 Python 代碼的形式運行 1 + 1。
運行時間用科學記數法寫成:(2, 1.7687999843474245e-05)
你可以通過觀察 e 后面的 -5 來了解它的來源,它告訴你把小數點向左移動 5 步,就像這樣。
單位是秒,所以這是毫秒的一小部分,也就是0.017毫秒左右。
反復嘗試同一條指令,由于同一時間機器里有其他事情在進行,所以結果會有所不同,但都是同一個值左右。
如果你試著嘗試更大的數字,時間還是非常非常小的。
實際的處理時間還會更低,因為,啟動和停止時鐘等都算入到時間里面了。
對于這種很小的代碼的執行來說,這并不能說明什么。
所以接下來的文章,你會看到一些較長的模塊它的執行時間。關注編程聯盟,繼續學習了解更多的內容。
總結
以上是生活随笔為你收集整理的python输出运行时间表_Python编程第十二课 了解程序运行的时间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第6章 循环结构
- 下一篇: python输入一个字符一个数字_Pyt