黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

Python解釋執(zhí)行原理分析

系統(tǒng) 1951 0

本文較為詳細(xì)的分析了Python解釋執(zhí)行的原理,對(duì)于深入理解Python可以起到一定的幫助作用。具體分析如下:

首先,這里的解釋執(zhí)行是相對(duì)于編譯執(zhí)行而言的。我們都知道,使用C/C++之類的編譯性語(yǔ)言編寫的程序,是需要從源文件轉(zhuǎn)換成計(jì)算機(jī)使用的機(jī)器語(yǔ)言,經(jīng)過鏈接器鏈接之后形成了二進(jìn)制的可執(zhí)行文件。運(yùn)行該程序的時(shí)候,就可以把二進(jìn)制程序從硬盤載入到內(nèi)存中并運(yùn)行。

但是對(duì)于Python而言,python源碼不需要編譯成二進(jìn)制代碼,它可以直接從源代碼運(yùn)行程序。當(dāng)我們運(yùn)行python文件程序的時(shí)候,python解釋器將源代碼轉(zhuǎn)換為字節(jié)碼,然后再由python解釋器來執(zhí)行這些字節(jié)碼。這樣,python就不用擔(dān)心程序的編譯,庫(kù)的鏈接加載等問題了。

對(duì)于python解釋語(yǔ)言,有以下3方面的特性:

1.每次運(yùn)行都要進(jìn)行轉(zhuǎn)換成字節(jié)碼,然后再有虛擬機(jī)把字節(jié)碼轉(zhuǎn)換成機(jī)器語(yǔ)言,最后才能在硬件上運(yùn)行。與編譯性語(yǔ)言相比,每次多出了編譯和鏈接的過程,性能肯定會(huì)受到影響。

2.由于不用關(guān)心程序的編譯和庫(kù)的鏈接等問題,開發(fā)的工作也就更加輕松啦。

3.python代碼與機(jī)器底層更遠(yuǎn)了,python程序更加易于移植,基本上無需改動(dòng)就能在多平臺(tái)上運(yùn)行。

在具體計(jì)算機(jī)上實(shí)現(xiàn)一種語(yǔ)言,首先要確定的是表示該語(yǔ)言語(yǔ)義解釋的虛擬計(jì)算機(jī),一個(gè)關(guān)鍵的問題是程序執(zhí)行時(shí)的基本表示是實(shí)際計(jì)算機(jī)上的機(jī)器語(yǔ)言還是虛擬機(jī)的機(jī)器語(yǔ)言。這個(gè)問題決定了語(yǔ)言的實(shí)現(xiàn)。根據(jù)這個(gè)問題的回答, 可以將程序設(shè)計(jì)語(yǔ)言劃分為兩大類:編譯型語(yǔ)言和解釋型語(yǔ)言。

1.編譯實(shí)現(xiàn)的語(yǔ)言 ,如:C、C++、Fortran、Pascal、Ada。由編譯型語(yǔ)言編寫的源程序需要經(jīng)過編譯,匯編和鏈接才能輸出目標(biāo)代碼,然后由機(jī)器執(zhí)行目標(biāo)代碼。目標(biāo)代碼是有機(jī)器指令組成,不能獨(dú)立運(yùn)行,因?yàn)樵闯绦蛑锌赡苁褂昧艘恍﹨R編程序不能解釋引用的庫(kù)函數(shù),而庫(kù)函數(shù)又不在源程序中,此時(shí)還需要鏈接程序完成外部引用和目標(biāo)模板調(diào)用的鏈接任務(wù),最后才能輸出可執(zhí)行代碼。

2.解釋型語(yǔ)言 ,解釋器不產(chǎn)生目標(biāo)機(jī)器代碼,而是產(chǎn)生中間代碼,這種中間代碼與機(jī)器代碼不同,中間代碼的解釋是由軟件支持的,不能直接使用在硬件上。該軟件解釋器通常會(huì)導(dǎo)致執(zhí)行效率較低,用解釋型語(yǔ)言編寫的程序是由另一個(gè)可以理解中間代碼的解釋程序執(zhí)行的。和編譯的程序不同的是, 解釋程序的任務(wù)是逐一將源代碼的語(yǔ)句解釋成可執(zhí)行的機(jī)器指令,不需要將源程序翻譯成目標(biāo)代碼再執(zhí)行。對(duì)于解釋型語(yǔ)言,需要一個(gè)專門的解釋器來執(zhí)行該程序,每條語(yǔ)句只有在執(zhí)行是才能被翻譯,這種解釋型語(yǔ)言每執(zhí)行一次就翻譯一次,因而效率低下。

3.Java解釋器 ,java很特殊,java是需要編譯的,但是沒有直接編譯成機(jī)器語(yǔ)言,而是編譯成字節(jié)碼,然后在Java虛擬機(jī)上用解釋的方式執(zhí)行字節(jié)碼。Python也使用了類似的方式,先將python編譯成python字節(jié)碼,然后由一個(gè)專門的python字節(jié)碼解釋器負(fù)責(zé)解釋執(zhí)行字節(jié)碼。

4.python是一門解釋語(yǔ)言,但是出于效率的考慮,提供了一種編譯的方法。編譯之后就得到pyc文件,存儲(chǔ)了字節(jié)碼。python這點(diǎn)和java很類似,但是java與python不同的是,python是一個(gè)解釋型的語(yǔ)言,所以編譯字節(jié)碼不是一個(gè)強(qiáng)制的操作,事實(shí)上,編譯是一個(gè)自動(dòng)的過程,一般不會(huì)在意它的存在。編譯成字節(jié)碼可以節(jié)省加載模塊的時(shí)間,提高效率。

5.除了效率之外,字節(jié)碼的形式也增加了反向工程的難度,可以保護(hù)源代碼。這個(gè)只是一定程度上的保護(hù),反編譯還是可以的。

相信本文所述對(duì)于大家深入理解Python可以起到一定的促進(jìn)作用。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論