新聞中心
作為一名機(jī)器學(xué)習(xí)工程師,我使用Python已經(jīng)一年多了。

目前成都創(chuàng)新互聯(lián)公司已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、巫溪網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
最近出于興趣,我也開(kāi)始學(xué)習(xí)C ++。接觸C++后,才意識(shí)到Python是多么容易和直觀。
我對(duì)Python與其他語(yǔ)言的不同之處及其工作機(jī)制愈加好奇。
于是,本文誕生。 本篇文章將嘗試討論P(yáng)ython的內(nèi)部工作機(jī)制。
來(lái)源:Pexels
Python最初是Guido Van Rossum在業(yè)余時(shí)開(kāi)發(fā)的一個(gè)項(xiàng)目,于1991年首次發(fā)布。作為一門(mén)通用語(yǔ)言,Python為Netflix和Instagram等許多公司提供了強(qiáng)大支持。在一次采訪中,Guido將Python與Java/Swift等語(yǔ)言進(jìn)行了比較,他表示Java/Swift對(duì)于日常工作即是編程的軟件開(kāi)發(fā)人員是一個(gè)不錯(cuò)的選擇,而Python針對(duì)的目標(biāo)用戶是日常工作與軟件開(kāi)發(fā)無(wú)關(guān)的人,他們編寫(xiě)代碼主要是為了處理數(shù)據(jù)。
在閱讀有關(guān)Python的文章時(shí),經(jīng)常會(huì)遇到諸如“編譯型vs解釋型”、“字節(jié)碼vs機(jī)器碼”、“動(dòng)態(tài)類(lèi)型vs靜態(tài)類(lèi)型”、“垃圾回收站”等詞語(yǔ)。維基百科將Python描述為:
Python是一種解釋型的高級(jí)通用性編程語(yǔ)言,具有動(dòng)態(tài)類(lèi)型和垃圾回收功能。
解釋型語(yǔ)言
用C / C ++編寫(xiě)程序時(shí),必須進(jìn)行編譯。編譯是將人類(lèi)可理解的代碼轉(zhuǎn)換為機(jī)器可理解的代碼即“機(jī)器代碼”。機(jī)器代碼是CPU可直接執(zhí)行指令的基本形式。成功編譯后,代碼生成一個(gè)可執(zhí)行文件。執(zhí)行此文件,代碼中的操作將逐步運(yùn)行。
盡管也需要編譯這一步驟,但在大多數(shù)情況下,Python是一種解釋型語(yǔ)言,而非編譯型語(yǔ)言。首先將以.py文件編寫(xiě)的Python代碼編譯為字節(jié)碼(后文將詳細(xì)討論),然后以.pyc或.pyo格式存儲(chǔ)。
Python將源代碼轉(zhuǎn)換為字節(jié)碼,而不像C ++等轉(zhuǎn)換為機(jī)器代碼。該字節(jié)碼是可由解釋器執(zhí)行的低級(jí)指令集。Python解釋器在大多數(shù)PC中安裝在/usr/local/bin/python3.8路徑下。字節(jié)碼指令在虛擬機(jī)而非CPU上執(zhí)行。
為什么選擇解釋型語(yǔ)言?
解釋型語(yǔ)言具有獨(dú)立于平臺(tái)的一大優(yōu)勢(shì)。只要Python字節(jié)碼和虛擬機(jī)版本相同,Python字節(jié)碼就可以在任何平臺(tái)(Windows,MacOS等)上執(zhí)行。
Python的另一個(gè)優(yōu)點(diǎn)是動(dòng)態(tài)類(lèi)型。在C ++等靜態(tài)類(lèi)型語(yǔ)言中,必須先聲明變量類(lèi)型,并在編譯時(shí)檢查所有差異(如添加字符串和整數(shù))。但在像Python這樣的強(qiáng)類(lèi)型語(yǔ)言中,檢查變量類(lèi)型和所執(zhí)行操作的有效性由解釋器來(lái)完成。
解釋型語(yǔ)言的缺點(diǎn)
動(dòng)態(tài)類(lèi)型提供給代碼很大的自由度,但同時(shí)提高了代碼的風(fēng)險(xiǎn)性,有時(shí)會(huì)難以調(diào)試。
Python經(jīng)常被指責(zé)“速度慢”。這種說(shuō)法是相對(duì)的,也存在很多爭(zhēng)議,但之所以“慢”是因?yàn)榻忉屍餍枰鲱~外工作來(lái)將字節(jié)碼指令轉(zhuǎn)換成可以在機(jī)器上執(zhí)行的指令形式。StackOverflow上的一個(gè)帖子對(duì)此的解釋更易理解:
如果你能用自己的母語(yǔ)和別人交談,那通常要比口譯員把你的語(yǔ)言翻譯成其他語(yǔ)言讓對(duì)方理解要快得多。
來(lái)源:Pexels
垃圾回收究竟是什么?
在早期編程語(yǔ)言中,內(nèi)存分配主要依靠手動(dòng)操作。很多時(shí)候,當(dāng)變量不再使用或在程序的其他地方引用時(shí),需要手動(dòng)從內(nèi)存中清除。垃圾回收站代替人工進(jìn)行此項(xiàng)工作,無(wú)需任何操作即可自動(dòng)釋放空間。內(nèi)存管理有兩種方式:
簡(jiǎn)化方式是跟蹤某對(duì)象的引用次數(shù)。當(dāng)該數(shù)字下降到0時(shí),刪除該對(duì)象。這種方式被稱(chēng)為“引用計(jì)數(shù)”。在Python中無(wú)法禁用此功能。
在對(duì)象引用自身或兩個(gè)對(duì)象相互引用的情況下,“生成垃圾回收”線程可以發(fā)揮作用。這是傳統(tǒng)的引用計(jì)數(shù)所無(wú)法解決的。
什么是__pycache__?
在個(gè)人項(xiàng)目中或GitHub上,可能經(jīng)??吹矫麨開(kāi)_pycache__的文件夾被自動(dòng)創(chuàng)建。
/文件夾-_pycache_-preprocess.cpython-36.pyc-preprocess.py
如您所見(jiàn),自動(dòng)創(chuàng)建的文件名與文件夾外部的文件名相同,均為_(kāi)pycache_。.pyc擴(kuò)展名表示該文件包含preprocess.py的字節(jié)碼。cpython表示解釋器的類(lèi)型。CPython意味著解釋器是用C語(yǔ)言實(shí)現(xiàn)的。同樣,JPython是用Java實(shí)現(xiàn)的Python解釋器。
來(lái)源:diyitui
但為什么首先要?jiǎng)?chuàng)建文件夾? 因?yàn)檫@樣可以稍微提高Python程序的速度。 而另一種提高速度的方式是更改Python代碼,避免將其重新編譯為字節(jié)碼,從而節(jié)省時(shí)間。
分享文章:學(xué)了這么久,你知道Python是如何運(yùn)作的嗎?
標(biāo)題網(wǎng)址:http://m.5511xx.com/article/djcgdie.html


咨詢
建站咨詢
