亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 建站經驗 > 正文

六個竅門助你提高Python運行效率

2024-04-25 20:37:15
字體:
來源:轉載
供稿:網友

不喜歡Python的人經常會吐嘈Python運行太慢。但是,事實并非如此。嘗試以下六個竅門,來為你的Python應用提速。

竅門一:關鍵代碼使用外部功能包

Python簡化了許多編程任務,但是對于一些時間敏感的任務,它的表現經常不盡人意。使用C/C++或機器語言的外部功能包處理時間敏感任務,可以有效提高應用的運行效率。這些功能包往往依附于特定的平臺,因此你要根據自己所用的平臺選擇合適的功能包。簡而言之,這個竅門要你犧牲應用的可移植性以換取只有通過對底層主機的直接編程才能獲得的運行效率。以下是一些你可以選擇用來提升效率的功能包:

Cython

Pylnlne

PyPy

Pyrex

這些功能包的用處各有不同。比如說,使用C語言的數據類型,可以使涉及內存操作的任務更高效或者更直觀。Pyrex就能幫助Python延展出這樣的功能。Pylnline能使你在Python應用中直接使用C代碼。內聯代碼是獨立編譯的,但是它把所有編譯文件都保存在某處,并能充分利用C語言提供的高效率。

竅門二:在排序時使用鍵

Python含有許多古老的排序規則,這些規則在你創建定制的排序方法時會占用很多時間,而這些排序方法運行時也會拖延程序實際的運行速度。最佳的排序方法其實是盡可能多地使用鍵和內置的sort()方法。譬如,拿下面的代碼來說:

import operator

somelist = [(1, 5, 8), (6, 2, 4), (9, 7, 5)]

somelist.sort(key=operator.itemgetter(0))

somelist

#Output = [(1, 5, 8), (6, 2, 4), (9, 7, 5)]

somelist.sort(key=operator.itemgetter(1))

somelist

#Output = [(6, 2, 4), (1, 5, 8), (9, 7, 5)]

somelist.sort(key=operator.itemgetter(2))

somelist

#Output = [(6, 2, 4), (9, 7, 5), (1, 5, 8)],

在每段例子里,list都是根據你選擇的用作關鍵參數的索引進行排序的。這個方法不僅對數值類型有效,還同樣適用于字符串類型。

竅門三:針對循環的優化

每一種編程語言都強調最優化的循環方案。當使用Python時,你可以借助豐富的技巧讓循環程序跑得更快。然而,開發者們經常遺忘的一個技巧是:盡量避免在循環中訪問變量的屬性。譬如,拿下面的代碼來說:

lowerlist = ['this', 'is', 'lowercase']

upper = str.upper

upperlist = []

append = upperlist.append

for word in lowerlist:

append(upper(word))

print(upperlist)

#Output = ['THIS', 'IS', 'LOWERCASE']

每次你調用str.upper, Python都會計算這個式子的值。然而,如果你把這個求值賦值給一個變量,那么求值的結果就能提前知道,Python程序就能運行得更快。因此,關鍵就是盡可能減小Python在循環中的工作量。因為Python解釋執行的特性,在上面的例子中會大大減慢它的速度。

(注意:優化循環的方法還有很多,這只是其中之一。比如,很多程序員會認為,列表推導式是提高循環速度的最佳方法。關鍵在于,優化循環方案是提高應用程序運行速度的上佳選擇。)

竅門四:使用較新的Python版本

如果你在網上搜索Python,你會發現數不盡的信息都是關于如何升級Python版本。通常,每個版本的Python都會包含優化內容,使其運行速度優于之前的版本。但是,限制因素在于,你最喜歡的函數庫有沒有同步更新支持新的Python版本。與其爭論函數庫是否應該更新,關鍵在于新的Python版本是否足夠高效來支持這一更新。

你要保證自己的代碼在新版本里還能運行。你需要使用新的函數庫才能體驗新的Python版本,然后你需要在做出關鍵性的改動時檢查自己的應用。只有當你完成必要的修正之后,你才能體會新版本的不同。

然而,如果你只是確保自己的應用在新版本中可以運行,你很可能會錯過新版本提供的新特性。一旦你決定更新,請分析你的應用在新版本下的表現,并檢查可能出問題的部分,然后優先針對這些部分應用新版本的特性。只有這樣,用戶才能在更新之初就覺察到應用性能的改觀。

竅門五:嘗試多種編碼方法

每次創建應用時都使用同一種編碼方法幾乎無一例外會導致應用的運行效率不盡人意??梢栽诔绦蚍治鰰r嘗試一些試驗性的辦法。譬如說,在處理字典中的數據項時,你既可以使用安全的方法,先確保數據項已經存在再進行更新,也可以直接對數據項進行更新,把不存在的數據項作為特例分開處理。請看下面第一段代碼:

n = 16

myDict = {}

for i in range(0, n):

char = 'abcd'[i%4]

if char not in myDict:

myDict[char] = 0

myDict[char] += 1

print(myDict)

當一開始myDict為空時,這段代碼會跑得比較快。然而,通常情況下,myDict填滿了數據,至少填有大部分數據,這時換另一種方法會更有效率。

n = 16

myDict = {}

for i in range(0, n):

char = 'abcd'[i%4]

try:

myDict[char] += 1

except KeyError:

myDict[char] = 1

print(myDict)

在兩種方法中輸出結果都是一樣的。區別在于輸出是如何獲得的。跳出常規的思維模式,創建新的編程技巧能使你的應用更有效率。

竅門六:交叉編譯你的應用

開發者有時會忘記計算機其實并不理解用來創建現代應用程序的編程語言。計算機理解的是機器語言。為了運行你的應用,你借助一個應用將你所編的人類可讀的代碼轉換成機器可讀的代碼。有時,你用一種諸如Python這樣的語言編寫應用,再以C++這樣的語言運行你的應用,這在運行的角度來說,是可行的。關鍵在于,你想你的應用完成什么事情,而你的主機系統能提供什么樣的資源。

Nuitka是一款有趣的交叉編譯器,能將你的Python代碼轉化成C++代碼。這樣,你就可以在native模式下執行自己的應用,而無需依賴于解釋器程序。你會發現自己的應用運行效率有了較大的提高,但是這會因平臺和任務的差異而有所不同。

(注意:Nuitka現在還處在測試階段,所以在實際應用中請多加注意。實際上,當下最好還是把它用于實驗。此外,關于交叉編譯是否為提高運行效率的最佳方法還存在討論的空間。開發者已經使用交叉編譯多年,用來提高應用的速度。記住,每一種解決辦法都有利有弊,在把它用于生產環境之前請仔細權衡。)

在使用交叉編譯器時,記得確保它支持你所用的Python版本。Nuitka支持Python2.6, 2.7, 3.2和3.3。為了讓解決方案生效,你需要一個Python解釋器和一個C++編譯器。Nuitka支持許多C++編譯器,其中包括Microsoft Visual Studio, MinGW 和 Clang/LLVM。

交叉編譯可能造成一些嚴重問題。比如,在使用Nuitka時,你會發現即便是一個小程序也會消耗巨大的驅動空間。因為Nuitka借助一系列的動態鏈接庫(DDLs)來執行Python的功能。因此,如果你用的是一個資源很有限的系統,這種方法或許不太可行。

結論

前文所述的六個竅門都能幫助你創建運行更有效率的Python應用。但是銀彈是不存在的。上述的這些竅門不一定每次都能奏效。在特定的Python的版本下,有的竅門或許比其他的表現更好,但這有時候甚至取決于平臺的差異。你需要總結分析你的應用,找到它效率低下的部分,然后嘗試這些竅門,找到解決問題的最佳方法。

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线视频观看| 97在线免费观看| 97福利一区二区| 2019中文字幕全在线观看| 亚洲精品白浆高清久久久久久| 日本精品中文字幕| 日韩在线www| 日本三级久久久| 黑人巨大精品欧美一区二区三区| 久久久久久伊人| 亚洲欧美日韩视频一区| 成人有码在线视频| 国产亚洲精品久久久优势| 国产午夜精品美女视频明星a级| 国产亚洲欧美日韩美女| 91精品在线播放| 国产成人精品电影| 亚洲天堂成人在线视频| 色777狠狠综合秋免鲁丝| 欧美日韩午夜激情| 国产日韩欧美在线视频观看| 91免费精品视频| 欧美俄罗斯性视频| 国产999精品| 富二代精品短视频| 亚洲国产精品va在线| 欧美精品成人91久久久久久久| 亚洲国产精品va在看黑人| 久久婷婷国产麻豆91天堂| 欧美亚洲激情视频| 欧美肥老妇视频| 成人观看高清在线观看免费| 国产精品旅馆在线| 久久精品99久久久久久久久| 欧美在线一级视频| 日韩美女在线观看一区| 精品久久在线播放| 精品女厕一区二区三区| 成人动漫网站在线观看| 久久99热精品这里久久精品| 亚洲美女视频网| 国产精品久久久久久搜索| 国产一区二区久久精品| 国产精品无av码在线观看| 精品国产一区二区三区在线观看| 国产精品女主播视频| 91av在线影院| 国产精品视频资源| 亚洲色图欧美制服丝袜另类第一页| 欧美日本啪啪无遮挡网站| 欧美高清视频一区二区| 中文字幕在线成人| 久久久中精品2020中文| 亚洲图片制服诱惑| 色狠狠久久aa北条麻妃| 国产精品亚洲片夜色在线| 精品激情国产视频| 亚洲精品一区二区网址| 亚洲成人三级在线| 91亚洲精品一区| 欧美激情aaaa| 亚洲精品久久久久| 欧美成人精品一区二区三区| 日韩h在线观看| 欧美日韩人人澡狠狠躁视频| 青青久久av北条麻妃海外网| 亚洲免费电影在线观看| 日韩av综合网站| 欧美在线性爱视频| 国产精品久久电影观看| 色偷偷88888欧美精品久久久| 欧美富婆性猛交| 91九色综合久久| 日韩美女视频在线观看| 理论片在线不卡免费观看| 992tv在线成人免费观看| 中文字幕一精品亚洲无线一区| 高清视频欧美一级| 欧美一级片在线播放| 色香阁99久久精品久久久| 国产91热爆ts人妖在线| 亚洲精品视频久久| 亚洲国产精品va在线观看黑人| 欧美国产日韩xxxxx| 亚洲精品在线看| 亚洲最大福利视频| 亚洲精品黄网在线观看| 国产成人综合亚洲| 欧美电影在线播放| 日韩精品福利在线| 国产精品成人一区二区三区吃奶| 欧美激情在线狂野欧美精品| 欧美精品久久久久久久免费观看| 亚洲视频在线播放| 日本不卡高字幕在线2019| 欧美中文在线字幕| 色老头一区二区三区在线观看| 国产欧美va欧美va香蕉在线| 国产精品美女久久久久久免费| 亚洲女人天堂网| 91精品啪aⅴ在线观看国产| 久久精品久久久久| 日韩精品在线观看网站| 不卡av日日日| 亚洲护士老师的毛茸茸最新章节| 米奇精品一区二区三区在线观看| 91精品国产高清久久久久久久久| 国产一区二区三区免费视频| 国产精品久久久久久久久久新婚| 久久精品中文字幕免费mv| 欧美二区乱c黑人| 亚州av一区二区| 精品人伦一区二区三区蜜桃免费| 成人免费高清完整版在线观看| 日韩欧美一区二区三区| 国产欧美日韩高清| 国产精品极品美女在线观看免费| 亚洲国产天堂久久综合| 亚洲第一福利网| 欧美日韩午夜视频在线观看| 国产精品久久久久久av下载红粉| 国产成人精品在线播放| 日韩av中文字幕在线播放| xx视频.9999.com| 国产精品亚洲一区二区三区| 中文字幕日韩电影| 日韩综合中文字幕| 亚洲成人免费网站| 中文字幕一区二区精品| 日韩av免费一区| 亚洲精品美女在线| 国产欧美精品va在线观看| 日韩av最新在线观看| 成人午夜小视频| 97精品视频在线观看| 欧美夜福利tv在线| 成人中心免费视频| 日韩中文在线观看| 青草青草久热精品视频在线网站| 欧美精品18videos性欧美| 欧美黑人一区二区三区| 国产精品视频自拍| 在线观看久久久久久| 91精品久久久久久久| 亚洲大胆人体视频| 国产精品视频免费观看www| 成人高清视频观看www| 亚洲国产女人aaa毛片在线| 91欧美精品午夜性色福利在线| 国产精品96久久久久久| 久久精品国产成人| 欧美激情亚洲视频| 欧美日韩一区二区三区在线免费观看| 国产成人精品久久二区二区| 亚洲人成网站免费播放| 久久视频在线观看免费| 亚洲欧美制服另类日韩| 91亚洲国产成人久久精品网站| 色悠悠国产精品| 欧美成人剧情片在线观看| 久久琪琪电影院| 日本精品视频网站| 亚洲精品suv精品一区二区| 九色精品美女在线|