python是什么編程語言
編程語言主要從以下幾個(gè)角度為進(jìn)行分類羽嫡,編譯型和解釋型谨湘、靜態(tài)語言和動(dòng)態(tài)語言、強(qiáng)類型定義語言和弱類型定義語言碱屁,每個(gè)分類代表什么意思呢,我們一起來看一下蛾找。
1. 編譯型與解釋型娩脾。
編譯器是把源程序的每一條語句都編譯成機(jī)器語言,并保存成二進(jìn)制文件,這樣運(yùn)行時(shí)計(jì)算機(jī)可以直接以機(jī)器語言來運(yùn)行此程序,速度很快;
而解釋器則是只在執(zhí)行程序時(shí),才一條一條的解釋成機(jī)器語言給計(jì)算機(jī)來執(zhí)行,所以運(yùn)行速度是不如編譯后的程序運(yùn)行的快的.
這是因?yàn)橛?jì)算機(jī)不能直接認(rèn)識(shí)并執(zhí)行我們寫的語句,它只能認(rèn)識(shí)機(jī)器語言(是二進(jìn)制的形式)
編譯型
優(yōu)點(diǎn):編譯器一般會(huì)有預(yù)編譯的過程對(duì)代碼進(jìn)行優(yōu)化。因?yàn)榫幾g只做一次打毛,運(yùn)行時(shí)不需要編譯柿赊,所以編譯型語言的程序執(zhí)行效率高』猛鳎可以脫離語言環(huán)境獨(dú)立運(yùn)行碰声。
缺點(diǎn):編譯之后如果需要修改就需要整個(gè)模塊重新編譯。編譯的時(shí)候根據(jù)對(duì)應(yīng)的運(yùn)行環(huán)境生成機(jī)器碼熬甫,不同的操作系統(tǒng)之間移植就會(huì)有問題胰挑,需要根據(jù)運(yùn)行的操作系統(tǒng)環(huán)境編譯不同的可執(zhí)行文件。
解釋型
優(yōu)點(diǎn):有良好的平臺(tái)兼容性罗珍,在任何環(huán)境中都可以運(yùn)行洽腺,前提是安裝了解釋器(虛擬機(jī))。靈活覆旱,修改代碼的時(shí)候直接修改就可以蘸朋,可以快速部署,不用停機(jī)維護(hù)扣唱。
缺點(diǎn):每次運(yùn)行的時(shí)候都要解釋一遍藕坯,性能上不如編譯型語言。
2.動(dòng)態(tài)語言和靜態(tài)語言
通常我們所說的動(dòng)態(tài)語言噪沙、靜態(tài)語言是指動(dòng)態(tài)類型語言和靜態(tài)類型語言炼彪。
(1)動(dòng)態(tài)類型語言:動(dòng)態(tài)類型語言是指在運(yùn)行期間才去做數(shù)據(jù)類型檢查的語言,也就是說正歼,在用動(dòng)態(tài)類型的語言編程時(shí)辐马,永遠(yuǎn)也不用給任何變量指定數(shù)據(jù)類型,該語言會(huì)在你第一次賦值給變量時(shí)局义,在內(nèi)部將數(shù)據(jù)類型記錄下來喜爷。Python和Ruby就是一種典型的動(dòng)態(tài)類型語言冗疮,其他的各種腳本語言如VBScript也多少屬于動(dòng)態(tài)類型語言。
(2)靜態(tài)類型語言:靜態(tài)類型語言與動(dòng)態(tài)類型語言剛好相反檩帐,它的數(shù)據(jù)類型是在編譯其間檢查的术幔,也就是說在寫程序時(shí)要聲明所有變量的數(shù)據(jù)類型,C/C++是靜態(tài)類型語言的典型代表湃密,其他的靜態(tài)類型語言還有C#诅挑、JAVA等。
3.強(qiáng)類型定義語言和弱類型定義語言
(1)強(qiáng)類型定義語言:強(qiáng)制數(shù)據(jù)類型定義的語言泛源。也就是說拔妥,一旦一個(gè)變量被指定了某個(gè)數(shù)據(jù)類型,如果不經(jīng)過強(qiáng)制轉(zhuǎn)換俩由,那么它就永遠(yuǎn)是這個(gè)數(shù)據(jù)類型了毒嫡。舉個(gè)例子:如果你定義了一個(gè)整型變量a,那么程序根本不可能將a當(dāng)作字符串類型處理。強(qiáng)類型定義語言是類型安全的語言幻梯。
(2)弱類型定義語言:數(shù)據(jù)類型可以被忽略的語言兜畸。它與強(qiáng)類型定義語言相反, 一個(gè)變量可以賦不同數(shù)據(jù)類型的值。
強(qiáng)類型定義語言在速度上可能略遜色于弱類型定義語言碘梢,但是強(qiáng)類型定義語言帶來的嚴(yán)謹(jǐn)性能夠有效的避免許多錯(cuò)誤咬摇。另外,“這門語言是不是動(dòng)態(tài)語言”與“這門語言是否類型安全”之間是完全沒有聯(lián)系的煞躬!
例如:Python是動(dòng)態(tài)語言肛鹏,是強(qiáng)類型定義語言(類型安全的語言); VBScript是動(dòng)態(tài)語言,是弱類型定義語言(類型不安全的語言); JAVA是靜態(tài)語言恩沛,是強(qiáng)類型定義語言(類型安全的語言)在扰。
通過上面這些介紹,我們可以得出雷客,python是一門動(dòng)態(tài)解釋性的強(qiáng)類型定義語言芒珠。
python的種類
CPython
當(dāng)我們從Python官方網(wǎng)站下載并安裝好Python 3.6后,我們就直接獲得了一個(gè)官方版本的解釋器:CPython搅裙。這個(gè)解釋器是用C語言開發(fā)的皱卓,所以叫CPython。在命令行下運(yùn)行python
就是啟動(dòng)CPython解釋器部逮。
CPython是使用最廣的Python解釋器娜汁。教程的所有代碼也都在CPython下執(zhí)行。
IPython
IPython是基于CPython之上的一個(gè)交互式解釋器兄朋,也就是說掐禁,IPython只是在交互方式上有所增強(qiáng),但是執(zhí)行Python代碼的功能和CPython是完全一樣的。好比很多國(guó)產(chǎn)瀏覽器雖然外觀不同穆桂,但內(nèi)核其實(shí)都是調(diào)用了IE宫盔。
CPython用>>>
作為提示符,而IPython用In [``序號(hào)``]:
作為提示符享完。
PyPy
PyPy是另一個(gè)Python解釋器,它的目標(biāo)是執(zhí)行速度有额。PyPy采用JIT技術(shù)般又,對(duì)Python代碼進(jìn)行動(dòng)態(tài)編譯(注意不是解釋),所以可以顯著提高Python代碼的執(zhí)行速度巍佑。
絕大部分Python代碼都可以在PyPy下運(yùn)行茴迁,但是PyPy和CPython有一些是不同的,這就導(dǎo)致相同的Python代碼在兩種解釋器下執(zhí)行可能會(huì)有不同的結(jié)果萤衰。如果你的代碼要放到PyPy下執(zhí)行堕义,就需要了解PyPy和CPython的不同點(diǎn)。
Jython
Jython是運(yùn)行在Java平臺(tái)上的Python解釋器脆栋,可以直接把Python代碼編譯成Java字節(jié)碼執(zhí)行倦卖。
IronPython
IronPython和Jython類似,只不過IronPython是運(yùn)行在微軟.Net平臺(tái)上的Python解釋器椿争,可以直接把Python代碼編譯成.Net的字節(jié)碼怕膛。
小結(jié):
Python的解釋器很多,但使用最廣泛的還是CPython秦踪。如果要和Java或.Net平臺(tái)交互褐捻,最好的辦法不是用Jython或IronPython,而是通過網(wǎng)絡(luò)調(diào)用來交互椅邓,確保各程序之間的獨(dú)立性柠逞。