av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

創(chuàng)新互聯(lián)Python教程:python是虛擬機(jī)嗎

python并不是虛擬機(jī),運(yùn)行python文件的是python解釋器。python解釋器的工作原理如下:

 一、過程概述

1、python先把代碼(.py文件)編譯成字節(jié)碼,交給字節(jié)碼虛擬機(jī),然后虛擬機(jī)會(huì)從編譯得到的PyCodeObject對(duì)象中一條一條執(zhí)行字節(jié)碼指令,并在當(dāng)前的上下文環(huán)境中執(zhí)行這條字節(jié)碼指令,從而完成程序的執(zhí)行。Python虛擬機(jī)實(shí)際上是在模擬操作中執(zhí)行文件的過程。PyCodeObject對(duì)象中包含了字節(jié)碼指令以及程序的所有靜態(tài)信息,但沒有包含程序運(yùn)行時(shí)的動(dòng)態(tài)信息——執(zhí)行環(huán)境(PyFrameObject)

2、字節(jié)碼在python虛擬機(jī)程序里對(duì)應(yīng)的是PyCodeObject對(duì)象;

.pyc文件是字節(jié)碼在磁盤上的表現(xiàn)形式。

3、從整體上看:OS中執(zhí)行程序離不開兩個(gè)概念:進(jìn)程和線程。python中模擬了這兩個(gè)概念,模擬進(jìn)程和線程的分別是PyInterpreterState和PyTreadState。即:每個(gè)PyThreadState都對(duì)應(yīng)著一個(gè)幀棧,python虛擬機(jī)在多個(gè)線程上切換。當(dāng)python虛擬機(jī)開始執(zhí)行時(shí),它會(huì)先進(jìn)行一些初始化操作,最后進(jìn)入PyEval_EvalFramEx函數(shù),它的作用是不斷讀取編譯好的字節(jié)碼,并一條一條執(zhí)行,類似CPU執(zhí)行指令的過程。函數(shù)內(nèi)部主要是一個(gè)switch結(jié)構(gòu),根據(jù)字節(jié)碼的不同執(zhí)行不同的代碼。

推薦學(xué)習(xí)《python教程》

二、關(guān)于.pyc文件

PyCodeObject對(duì)象的創(chuàng)建時(shí)機(jī)是模塊加載的時(shí)候,即import。

1、執(zhí)行 python test.py 會(huì)對(duì)test.py進(jìn)行編譯成字節(jié)碼并解釋執(zhí)行,但不會(huì)生成test.pyc
2、如果test.py中加載了其他模塊,如import urllib2,那么python會(huì)對(duì)urllib2.py進(jìn)行編譯成字節(jié)碼,生成urllib2.pyc,然后對(duì)字節(jié)碼解釋執(zhí)行。
3、如果想生成test.pyc,我們可以使用python內(nèi)置模塊py_compile來編譯。
也可以執(zhí)行命令 python -m test.py 這樣,就生成了test.pyc
4、加載模塊時(shí),如果同時(shí)存在.py和.pyc,python會(huì)使用.pyc運(yùn)行,如果.pyc的編譯時(shí)間早于.py的時(shí)間,則重新編譯.py,并更新.pyc文件。


當(dāng)前文章:創(chuàng)新互聯(lián)Python教程:python是虛擬機(jī)嗎
鏈接URL:http://uogjgqi.cn/article/djeiipo.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流