第一部分 Python如何运行
Python如何運行程序
一、Python 運行時原理
Python運行腳本時,第一步是編譯成所謂的“字節碼”,之后將其轉發到“虛擬機”中。
1、字節碼編譯:
當程序執行時,Python內部(對大多數用戶是完全隱藏的)會先將源代碼(文件中的語句)編譯成所謂字節碼的形式。編譯是一個簡單的翻譯步驟,而且字節碼是源代碼底層的、與平臺無關的表現形式。概括的說,Python通過把每一條源語句分解為單一步驟來將這些源語句翻譯成一組字節碼指令。這些字節碼可以提高執行速度:比起文本文件中原始的源代碼語句,字節碼的運行速度要快得多。
如果Python進程在機器上擁有寫入權限,那么它將把程序的字節碼保存到一個以.pyc為擴展名的文件(“.pyc就是編譯過的“.py”源代碼)。Python保存字節碼是作為一種啟動速度的優化。下一次運行程序時,如果你在上次保存字節碼之后沒有修改過源代碼的話,Python將會加載,pyc文件并跳過編譯這個步驟。當Python必須重編譯時,它會自動檢查源文件和字節碼文件的時間戳:如果你又保存了源代碼,下次程序運行時,字節碼將自動重新創建。
如果Python無法在機器上寫入字節碼,程序仍然可以工作:字節碼將會在內存中生成并在程序結束時簡單地丟棄。
2、Python虛擬機(PVM)
一旦程序編譯成字節碼(或字節碼從已存在的.pyc文件中載入),之后的字節碼發送到通常稱為Python虛擬機(Python Virtual Machine, PVM)上來執行。PVM不是一個獨立的程序,不需要安裝。事實上,PVM是迭代運行字節碼指令的一個大循環,一個接一個地完成操作。PVM是Python的運行引擎,它時常表現為Python系統的一部分,并且它是實際運行腳本的組件。從技術上講,它才是所謂“Python解釋器”的最后一步。
圖2-2描述介紹的運行時的結構。這些復雜性是有意對Python程序員隱藏起來的。字節碼的編譯是自動完成的,而且PVM也僅僅是安裝在機器上的Python系統的一部分。程序員只需簡單的編寫代碼并運行包括有語句的文件。
注意:
(1)性能的含義
Pyhton與C和C++等完全編譯語言相比不同之處:
a.Python的工作中沒有“build”或“make”的步驟,代碼在寫好后立即運行;
b.Python字節碼不是機器的二進制編碼(例如,Intel芯片的指令)。
Python代碼無法運行像C或C++代碼一樣快,原因是PVM循環(而不是CPU芯片)仍然需要解釋字節碼,并且字節碼指令與CPU指令相比需要更多的工作。
純Python代碼的運行速度比傳統解釋語言快,原因是和其他經典的解釋器不同,這里仍有內部的編譯步驟:Python并不需要反復地重分析和重分解每一行語句。
(2)開發的含義
Python執行模塊的另一個情況是其開發和執行的環境實際上并沒有區別。在Python中,編譯器總是在運行時出現,并且是運行程序系統的一部分。
在Python中真正擁有的只有運行時:完全不需要初始的編譯階段,所有的事情是在程序運行時發生的,這甚至還包括了建立函數和類的操作以及連接的模塊,這些事情對于靜態語言往往是發生在執行之前的。
二、 Python程序運行方法
1、交互模式下運行代碼
這個比較簡單,輸入代碼的結果在按下Enter鍵后在提示符>>>這一行顯示。
在交互提示模式下,用一個空行結束符合語句。
2、系統命令行和文件
模塊是一個包含了python語句的簡單文本文件。可以直接運行的模塊文件往往叫做腳本(一個頂層程序文件的非正式說法)。
python文本文件的運行方式:系統命令行、通過點擊圖標、通過在IDLE用戶界面選擇等。
1 # A first Python script 2 import sys 3 print(sys.platform) 4 print(2**100) 5 x = 'Spam!' 6 print(x * 8)
使用命令行運行時需要輸入Python的完整路徑(在新windows中可以省略python名字)和.py文件的完整路徑
C:Userszjp> C:UserszjpDesktop1.py win32 1267650600228229401496703205376 Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam!
點擊圖標運行時,會出現窗口一閃而過,可以在文件最后加input()命令。
此外還可以通過IDLE界面中的F5運行。
三、模塊導入和重載
每一個以擴展名py結尾的Python源代碼文件都是一個模塊,其它的文件可以通過導入一個模塊讀取這個模塊的內容。導入從本質上來講,就是載入另一個文件,并能夠讀取那個文件的內容。一個模塊的內容通過這樣的屬性能夠被外部世界使用。
這種基于模塊的方式使模塊變成Python程序架構的一個核心概念。更大的程序往往以多個模塊文件的形式出現,并且導入了其他模塊文件的工具。其中的一個模塊文件設計成主文件,或叫做頂層文件(就是啟動后能夠運行整個程序的文件)。
例如,如果開始一個交互對話(從系統命令行、從開始菜單或者在IDLE中),可以通過簡單的import來實現(確保刪除了上面添加的input行)
>>> import script1 win32 1267650600228229401496703205376 Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam! >>> import script1 >>> import script1
在默認情況下,只是在每次會話的第一次運行,在第一次導入之后,其他的導入都不會再工作,甚至在另一個窗口中改變并保存了模塊的源代碼也不行。這是有意設計的結果。導入是一個開銷很大的操作,以至于每個文件,每個程序運行不能夠重復多余一次。
如果真的想要在同一次會話中再次運行文件(不停止和重新啟動會話),需要調用imp標準庫模塊中可用的reload函數。
>>> from imp import reload >>> reload(script1) win32 1267650600228229401496703205376 Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam! <module 'script1' from 'D:Python27script1.pyc'>
模塊的顯要特性:屬性
從更宏觀的角度來看,模塊扮演了一個工具庫的角色。從一般意義上來說,模塊往往是變量名的封裝,被認作是命名空間。在一個包中的變量名就是所謂的屬性:也就是說,屬性就是綁定在特定對象上的變量名(就像一個模塊)。
在典型的應用中,導入者得到了模塊文件中在頂層所定義的所有變量名。這些變量名通常被賦值給通過模塊函數、類、變量以及其他被導出的工具。表面上看,一個模塊文件的變量名可以通過兩個python語句讀取——import和from,以及reload調用。
dir函數可以獲得模塊內部的可用的變量名的列表。
>>> dir(script1) ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'sys', 'x']
雙下劃線開頭并結尾的變量名,這些通常是由python預定義的內置變量名,那些通過代碼賦值而定義的變量在dir結果的最后顯示。
總結
以上是生活随笔為你收集整理的第一部分 Python如何运行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微服务架构图
- 下一篇: 忘记MySQL密码解决方法---MySQ