天天看點

一行代碼都不加如何提升性能 | Python從入門到精通:入門篇之二十一

第二十節:如何用一行代碼讓運作速度提高近10倍

上節課我們講了使用一行代碼就把程式的運算性能提升了将近10倍,在文章末尾老師給大家留了個思考,怎麼樣能夠使得程式的性能更加地優化呢?

在講授之前先給大家做下思想的引導。舉個例子,還是說列印100以内的質數,如果是要判斷100,利用上節課的思想,程式隻需要判斷100是否可以整除2就行了,這種類型的數字這麼判斷都是沒有問題的,那麼對于97來說呢,是不是還是需要從2~96進行判斷,但是結合實際情況來看,96有沒有可能被97整除,顯然是不合理的,95、94、93、、、等也都是如此。那該如何更加優化這個情況?

繼續跟着老師的思路往下走: 咱們先拿一個合數來舉個例子,假如說是36,他的因數都有什麼,1,36,2,18,3,12,4,9,6,有沒有發現它的因數都是成對出現的,除了6*6這麼一種情況。那其實咱們隻需要判斷j小于i的算術平方根的位置就沒必要再往下算了,但是為了避免漏掉像是6這種數字,還是要使得

j<=i**0.5

,就可以保證97這種情況進一步的優化了。代碼如下:

from time import*
begin=time()
i=2
while i<=10000:
    flag = True
    j=2
    while j <= i ** 0.5:
        if i % j == 0 :
            flag = False
            break
        j += 1
    if flag :
        pass
    i+=1
end=time()
print("程式運作的時長為:",end-begin,"秒")           

執行結果為:

此時同樣判斷2~10000以内的質數就隻需要0.0418秒了。即使是将數字改為100000,程式執行也隻需要1.009秒。

看起來隻是三個符号的改變,卻讓程式的性能得到了極大的提升,這是對我們的數學能力和分析能力的雙重考核,但是現在想不出來這種方式也不需要擔心,随着後面的學習,會更加頻繁的進行這種思考,慢慢的就耳濡目染自己也學會了。

入門課程到這裡就基本結束了,在進行進階教程之前先來帶大家開發一個小遊戲:唐僧大戰白骨精!帶大家感受一下python的趣味之處。

第二十二節:遊戲的運作邏輯概述

視訊學習:阿裡雲大學之Python進階必看

配套Python進階文章點選此處擷取