最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)提高運(yùn)行速度的技巧分享

 更新時(shí)間:2023年06月13日 08:53:07   作者:0思必得0  
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)提高運(yùn)行速度的相關(guān)技巧,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下

提高Python運(yùn)行速度(大方向)

現(xiàn)在我們已經(jīng)知曉如何計(jì)算Python代碼的運(yùn)行時(shí)間了,接下來(lái)就是要想辦法提高Python運(yùn)行速度。一般要提高Python代碼的運(yùn)行速度遵循以下幾點(diǎn):

1.嘗試通過(guò)多線程運(yùn)行

多線程(multithreading),是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一個(gè)線程,進(jìn)而提升整體處理性能。

在一個(gè)程序中,這些獨(dú)立運(yùn)行的程序片段叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理”。利用多線程技術(shù)可以顯著提高某些特定的代碼運(yùn)行速度。

現(xiàn)在一般普通的計(jì)算機(jī)硬件都支持多線程技術(shù),如果一個(gè)程序任務(wù)可以分解成多線程形式,那么運(yùn)行速度將會(huì)得到極大的提升。
在以后的教程中將會(huì)介紹這種技術(shù)。

2.優(yōu)化循環(huán)處理

循環(huán)處理是編寫代碼時(shí)經(jīng)常遇到的情況,由于大循環(huán)一般會(huì)運(yùn)行上成千上萬(wàn)次以上,于是在循環(huán)結(jié)構(gòu)中,每一個(gè)小小的代碼片段進(jìn)行優(yōu)化處理后都將會(huì)大大提高代碼的運(yùn)行速度。

后面將會(huì)詳細(xì)介紹一些比較實(shí)用且常見(jiàn)的優(yōu)化小技巧。

3.使用內(nèi)置模塊、函數(shù)和數(shù)據(jù)類型

Python內(nèi)置的模塊和函數(shù)是在安裝Python時(shí)已經(jīng)定義和安裝好的,不僅導(dǎo)入方便,而且運(yùn)行速度要比個(gè)人編寫的代碼快很多。

速度對(duì)比_內(nèi)置模塊

from math import factorial
from time import time
from timeit import timeit
def slow(n=100):
    if n == 0 or n == 1:
        return 1
    else:
        return n * slow(n - 1)
def fast():
factorial(100)
b1 = time()
timeit(slow, number=10_0000)
e1 = time()
print(f'函數(shù) slow 運(yùn)行 10 萬(wàn)次的時(shí)間為:{e1 - b1}')
b2 = time()
timeit(fast, number=10_0000)
e2 = time()
print(f'函數(shù) fast 運(yùn)行 10 萬(wàn)次的時(shí)間為:{e2 - b2}')

函數(shù) slow 運(yùn)行 10 萬(wàn)次的時(shí)間為:1.9230999946594238
函數(shù) fast 運(yùn)行 10 萬(wàn)次的時(shí)間為:0.1594223976135254

速度對(duì)比_內(nèi)置函數(shù)

from mdTools import ftDecTimeIt  # 小編自己編寫的一個(gè)計(jì)時(shí)裝飾器
@ftDecTimeIt(100_0000)
def slow():
    new_list = []
    word_list = ["i", "am", "a", "bad", "boy"]
    for word in word_list:
        new_list.append(word.capitalize())
@ftDecTimeIt(100_0000)
def fast():
    word_list = ["i", "am", "a", "bad", "boy"]
new_list = list(map(str.capitalize, word_list))
slow()
fast()

函數(shù) slow 運(yùn)行 1000000 次的總耗時(shí)為:0.9304 秒
函數(shù) fast 運(yùn)行 1000000 次的總耗時(shí)為:0.8292 秒

速度對(duì)比_內(nèi)置方法

from mdTools import ftDecTimeIt
@ftDecTimeIt(100_0000)
def slow():
    new_list = ""
    word_list = ["i", "am", "a", "bad", "boy"]
    for word in word_list:
        new_list += word.capitalize()
@ftDecTimeIt(100_0000)
def fast():
    word_list = ["i", "am", "a", "bad", "boy"]
new_list = ''.join(word_list)
slow()
fast()

函數(shù) slow 運(yùn)行 1000000 次的總耗時(shí)為:1.0097 秒
函數(shù) fast 運(yùn)行 1000000 次的總耗時(shí)為:0.2878 秒

4.使用較新的Python版本

Python版本是在不停迭代更新的,每次更新都會(huì)包含優(yōu)化內(nèi)容,這其中不但會(huì)優(yōu)化內(nèi)置函數(shù)、內(nèi)置方法、更新模塊,增加新的語(yǔ)法、模塊等,還會(huì)優(yōu)化運(yùn)行速度,截止目前,最新的Python11某些方便運(yùn)行速度相較于舊版本更是提升30%左右。

5.使用lru_cache緩存數(shù)據(jù)

當(dāng)你可以把需要計(jì)算出來(lái)的數(shù)據(jù)保存下來(lái)的時(shí)候,千萬(wàn)不要重復(fù)的去計(jì)算它。如果你有一個(gè)經(jīng)常需要使用的函數(shù),而且返回的是可預(yù)測(cè)的結(jié)果,最好是能將其緩存到內(nèi)存中。后續(xù)的函數(shù)調(diào)用如果是一樣的,將立即返回結(jié)果。

Python本地庫(kù)functools中的裝飾器:@functools.lru_cache,它就能夠緩存函數(shù)最近的調(diào)用,當(dāng)緩存的值在特定時(shí)間內(nèi)保持不變的時(shí)候這個(gè)非常好用,比如遞歸調(diào)用問(wèn)題。

速度對(duì)比_緩存數(shù)據(jù)

from functools import lru_cache
from time import time
from timeit import timeit
def slow(n=10):
    if n == 1:
        return 1
    if n == 2:
        return 2
    else:
        return slow(n-2) + slow(n-1)
@lru_cache()
def fast(n=10):
    if n == 1:
        return 1
    if n == 2:
        return 2
    else:
        return slow(n - 2) + slow(n - 1)
b1 = time()
timeit(slow, number=10_0000)
e1 = time()
print(f'函數(shù) slow 運(yùn)行 10 萬(wàn)次的時(shí)間為:{e1 - b1}')
b2 = time()
timeit(fast, number=10_0000)
e2 = time()
print(f'函數(shù) fast 運(yùn)行 10 萬(wàn)次的時(shí)間為:{e2 - b2}')

函數(shù) slow 運(yùn)行 10 萬(wàn)次的時(shí)間為:1.344538927078247
函數(shù) fast 運(yùn)行 10 萬(wàn)次的時(shí)間為:0.007016420364379883

6.使用專門的第三方庫(kù)

們都知道,專業(yè)的人做專業(yè)的事,因?yàn)樗麄兺纫话闳烁私?,也更有?jīng)驗(yàn),處理起來(lái)也更加得心應(yīng)手。同樣的,在Python編程中,如果有專門的庫(kù),那么處理起來(lái)也事半功倍,而且效率也高。

速度對(duì)比_numba庫(kù)

numba中提供了jit裝飾器,它可以將其裝飾的函數(shù)JIT編譯成機(jī)器碼函數(shù),并返回一個(gè)可在Python中調(diào)用機(jī)器碼的包裝對(duì)象。

from mdTools import ftDecTimeIt
from numba import jit
@ftDecTimeIt(1)
def slow(x=1, y=1_0000_0000):
    s = 0
    for i in range(x, y):
        s += i
return s
@ftDecTimeIt(1)
@jit
def fast(x=1, y=1_0000_0000):
    s = 0
    for i in range(x, y):
        s += i
return s
slow()
fast()

函數(shù) slow 運(yùn)行 1 次的總耗時(shí)為:5.2450 秒
函數(shù) fast 運(yùn)行 1 次的總耗時(shí)為:0.2750 秒

速度對(duì)比_numpy庫(kù)

果你要處理非常龐大的數(shù)據(jù),并且希望能高效的對(duì)它們進(jìn)行計(jì)算,那么numpy庫(kù)是一個(gè)非常好的選擇。numpy在一些關(guān)鍵代碼上使用了C來(lái)代替,比原生Python更快處理數(shù)組,也能更高效的存儲(chǔ)數(shù)據(jù)。

使用numpy也能更方便也更快的創(chuàng)建出大數(shù)據(jù)。讓我們來(lái)看下面的例子:

from mdTools import ftDecTimeIt
import numpy as np
array = np.random.random(1_0000_0000)
@ftDecTimeIt(1)
def slow():
sum(array)
@ftDecTimeIt(1)
def fast():
np.sum(array)
slow()
fast()

函數(shù) slow 運(yùn)行 1 次的總耗時(shí)為:8.1115 秒
函數(shù) fast 運(yùn)行 1 次的總耗時(shí)為:0.1173 秒

到此這篇關(guān)于Python實(shí)現(xiàn)提高運(yùn)行速度的技巧分享的文章就介紹到這了,更多相關(guān)Python運(yùn)行速度內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python-xpath獲取html文檔的部分內(nèi)容

    python-xpath獲取html文檔的部分內(nèi)容

    這篇文章主要介紹了python-xpath獲取html文檔的部分內(nèi)容,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • 教你怎么用python連接sql server

    教你怎么用python連接sql server

    今天教大家怎么用python連接sql server,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Python中Cryptography庫(kù)實(shí)現(xiàn)加密解密

    Python中Cryptography庫(kù)實(shí)現(xiàn)加密解密

    Python中Cryptography庫(kù)給你的文件加把安全鎖,本文主要介紹了Python中Cryptography庫(kù)實(shí)現(xiàn)加密解密,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Python錯(cuò)誤的處理方法

    Python錯(cuò)誤的處理方法

    這篇文章主要介紹了Python錯(cuò)誤的處理方法,文中代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Python機(jī)器學(xué)習(xí)之K-Means聚類實(shí)現(xiàn)詳解

    Python機(jī)器學(xué)習(xí)之K-Means聚類實(shí)現(xiàn)詳解

    這篇文章主要為大家詳細(xì)介紹了Python機(jī)器學(xué)習(xí)之K-Means聚類的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • python繪制簡(jiǎn)單直方圖的方法

    python繪制簡(jiǎn)單直方圖的方法

    這篇文章主要為大家詳細(xì)介紹了python繪制簡(jiǎn)單直方圖的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • python+opencv識(shí)別圖片中的圓形

    python+opencv識(shí)別圖片中的圓形

    這篇文章主要為大家詳細(xì)介紹了python+opencv識(shí)別圖片中的圓形 ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Django CBV類的用法詳解

    Django CBV類的用法詳解

    這篇文章主要介紹了Django CBV類的用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Pygame?transform模塊入門介紹

    Pygame?transform模塊入門介紹

    pygame.transform模塊允許您對(duì)加載、創(chuàng)建后的圖像進(jìn)行一系列操作,比如調(diào)整圖像大小、旋轉(zhuǎn)圖片等操作,感興趣的可以了解一下
    2022-08-08
  • numpy:np.newaxis 實(shí)現(xiàn)將行向量轉(zhuǎn)換成列向量

    numpy:np.newaxis 實(shí)現(xiàn)將行向量轉(zhuǎn)換成列向量

    今天小編就為大家分享一篇numpy:np.newaxis 實(shí)現(xiàn)將行向量轉(zhuǎn)換成列向量,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11

最新評(píng)論

沅陵县| 乌恰县| 墨江| 大同县| 阿拉尔市| 兴安县| 山西省| 莱芜市| 湖南省| 荣昌县| 桦甸市| 东光县| 秀山| 儋州市| 女性| 瓦房店市| 建瓯市| 阳泉市| 安西县| 宁陕县| 昌邑市| 罗定市| 新竹市| 陕西省| 永康市| 六枝特区| 务川| 邯郸市| 泊头市| 洛南县| 富宁县| 社旗县| 汾西县| 连平县| 昌宁县| 鱼台县| 博乐市| 白水县| 镇康县| 丰台区| 博爱县|