本篇內(nèi)容介紹了“Python語(yǔ)言和其他語(yǔ)言有什么區(qū)別”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)公司從2013年開(kāi)始,先為金沙等服務(wù)建站,金沙等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為金沙企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
1、談?wù)剬?duì)Python的了解和其他語(yǔ)言的區(qū)別?
Python是一門語(yǔ)法簡(jiǎn)潔優(yōu)美,功能強(qiáng)大無(wú)比,應(yīng)用領(lǐng)域非常廣泛,具有強(qiáng)大完備的第三方庫(kù)的一門強(qiáng)類型的動(dòng)態(tài),可移植,可擴(kuò)展,可嵌入的解釋型編程語(yǔ)言。
強(qiáng)類型語(yǔ)言、弱類型語(yǔ)言的區(qū)別:
如果語(yǔ)言經(jīng)常隱式地轉(zhuǎn)換變量的類型,那這個(gè)語(yǔ)言就是弱類型語(yǔ)言,如果很少會(huì)這樣做,那就是強(qiáng)類型語(yǔ)言。Python很少會(huì)隱式地轉(zhuǎn)換變量的類型,所以Python是強(qiáng)類型的語(yǔ)言。
強(qiáng)類型語(yǔ)言和弱類型原因其判斷的根本是是否會(huì)隱式進(jìn)行語(yǔ)言類型轉(zhuǎn)變。強(qiáng)類型原因在速度上可能略遜于弱類型語(yǔ)言,但是強(qiáng)類型定義語(yǔ)帶來(lái)的嚴(yán)謹(jǐn)性又避免了不必要的錯(cuò)誤。
強(qiáng)類型語(yǔ)言包括:Java、.net、Python、C++等語(yǔ)言。其中Python是動(dòng)態(tài)語(yǔ)言,是強(qiáng)類型定義語(yǔ)言,是類型安全的語(yǔ)言,Java是靜態(tài)語(yǔ)言,是強(qiáng)類型定義語(yǔ)言,也是類型安全的語(yǔ)言;弱類型語(yǔ)言包括:VB,PHP,JavaScript等語(yǔ)言。其中VBScript是動(dòng)態(tài)語(yǔ)言,是一種類型不安全的原因。動(dòng)態(tài)語(yǔ)言、靜態(tài)語(yǔ)言的區(qū)別:
動(dòng)態(tài)類型語(yǔ)言:動(dòng)態(tài)性語(yǔ)言是指在運(yùn)行期間才去做數(shù)據(jù)類型檢查的語(yǔ)言,也就是說(shuō)動(dòng)態(tài)類型語(yǔ)言編程時(shí),永遠(yuǎn)不用給任何變量指定數(shù)據(jù)類型,該語(yǔ)言會(huì)在第一次賦值給變量時(shí),在內(nèi)部將數(shù)據(jù)類型記錄下來(lái)**。Python和Ruby就是一種典型的動(dòng)態(tài)類型語(yǔ)言,其他的各種腳本語(yǔ)言如VBScript也多少屬于動(dòng)態(tài)類型語(yǔ)言。
靜態(tài)類型語(yǔ)言:靜態(tài)類型語(yǔ)言與動(dòng)態(tài)類則剛好相反,它的數(shù)據(jù)類型在編譯期間檢查,也就是說(shuō)在寫程序時(shí)要聲明所有變量的數(shù)據(jù)類型,C/C++是靜態(tài)類型語(yǔ)言的典型代表,其他靜態(tài)語(yǔ)言還有C#、Java等。
對(duì)于動(dòng)態(tài)語(yǔ)言與靜態(tài)語(yǔ)言的區(qū)分,其根本在于數(shù)據(jù)類型是在運(yùn)行期間檢查還是在編譯期間檢查。編譯型語(yǔ)言、解釋型語(yǔ)言的區(qū)別:
編譯型語(yǔ)言:需要將一段程序直接翻譯成機(jī)器碼(對(duì)于C/C++這種非跨平臺(tái)的語(yǔ)言)或者中間碼(Java這種跨平臺(tái)語(yǔ)言,需要虛擬機(jī)再將中間碼印射成機(jī)器碼)。一般需經(jīng)過(guò)編譯(compile)、鏈接(linker)這兩個(gè)步驟。編譯是把源代碼編譯成機(jī)器碼,鏈接是把各個(gè)模塊的機(jī)器碼和依賴庫(kù)串連起來(lái)生成可執(zhí)行文件。
解釋型語(yǔ)言:使用解釋器將源碼逐行解釋成機(jī)器碼并立即執(zhí)行,不會(huì)進(jìn)行整體性的編譯和鏈接處理,相比編譯型語(yǔ)言省了道工序。
一個(gè)像是吃飯等菜都上全了再開(kāi)動(dòng),一個(gè)像是吃火鍋,邊涮邊吃,時(shí)機(jī)不一樣。
解釋型語(yǔ)言的優(yōu)點(diǎn):跨平臺(tái)容易,只需提供特定平臺(tái)的解釋器;缺點(diǎn):每次運(yùn)行的時(shí)候都要解釋一遍,性能上不如編譯型語(yǔ)言。2、簡(jiǎn)述解釋型和編譯型編程語(yǔ)言?
3、Python的解釋器種類以及相關(guān)特點(diǎn)?
CPython:官方版本的解釋器。這個(gè)解釋器是用C語(yǔ)言開(kāi)發(fā)的,所以叫CPython。在命令行下運(yùn)行python就是啟動(dòng)CPython解釋器。CPython是使用最廣的Python解釋器。
IPython:IPython是基于CPython之上的一個(gè)交互式解釋器,也就是說(shuō),IPython只是在交互方式上有所增強(qiáng),但是執(zhí)行Python代碼的功能和CPython是完全一樣的。CPython用>>>作為提示符,而IPython用In [序號(hào)]:作為提示符。
PyPy:它的目標(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é)果。
Jython:Jython是運(yùn)行在Java平臺(tái)上的Python解釋器,可以直接把Python代碼編譯成Java字節(jié)碼執(zhí)行。
IronPython:IronPython和Jython類似,只不過(guò)IronPython是運(yùn)行在微軟.Net平臺(tái)上的Python解釋器,可以直接把Python代碼編譯成.Net的字節(jié)碼。4、說(shuō)說(shuō)你知道的Python3和Python2之間的區(qū)別?
編碼:Python2的默認(rèn)編碼是asscii,這也是導(dǎo)致Python2中經(jīng)常遇到編碼問(wèn)題的原因之一,至于是為什么會(huì)使用asscii作為默認(rèn)編碼,原因在于Python這門語(yǔ)言誕生的時(shí)候還沒(méi)出現(xiàn)Unicode。Python3默認(rèn)采用了UTF-8作為默認(rèn)編碼,因此你不再需要在文件頂部寫# coding=utf-8了。
字符串:Python2中字符的類型,str:已經(jīng)編碼后的字節(jié)序列,unicode:編碼前的文本字符;而Python3中字符的類型,str:編碼過(guò)的unicode文本字符,bytes:編碼前的字節(jié)序列。
可以認(rèn)為字符串有兩種狀態(tài),即文本狀態(tài)和字節(jié)(二進(jìn)制)狀態(tài)。Python2和Python3中的兩種字符類型都分別對(duì)應(yīng)這兩種狀態(tài),然后相互之間進(jìn)行編解碼轉(zhuǎn)化。編碼就是將字符串轉(zhuǎn)換成字節(jié)碼,涉及到字符串的內(nèi)部表示;解碼就是將字節(jié)碼轉(zhuǎn)換為字符串,將比特位顯示成字符。
在Python2中,str和unicode都有encode和decode方法。但是不建議對(duì)str使用encode,對(duì)unicode使用decode, 這是Python2設(shè)計(jì)上的缺陷。Python3則進(jìn)行了優(yōu)化,str只有一個(gè)encode方法將字符串轉(zhuǎn)化為一個(gè)字節(jié)碼,而且bytes也只有一個(gè)decode方法將字節(jié)碼轉(zhuǎn)化為一個(gè)文本字符串。
print:Python2中的print是語(yǔ)句;Python3中的print是函數(shù)。例如:
# py2>>> print("hello", "world")('hello', 'world')# py3>>> print("hello", "world")hello world
這個(gè)例子就比較明顯了,在py2中,print語(yǔ)句后面接的是一個(gè)元組對(duì)象,而在py3中,print函數(shù)可以接收多個(gè)位置參數(shù)。如果希望在Python2中把print當(dāng)函數(shù)使用,那么可以導(dǎo)入future模塊中的print_function。
import:python2默認(rèn)是按照相對(duì)路徑導(dǎo)入模塊和包,python3默認(rèn)則是按照絕對(duì)路徑導(dǎo)入。
input:Python3:input解析輸入為str字符型;Python2:input解析輸入為int型,raw_input解析輸入為str類型。
算法符:在Python2中,/執(zhí)行傳統(tǒng)除法,對(duì)于整數(shù)執(zhí)行截?cái)喑?,浮點(diǎn)數(shù)執(zhí)行浮點(diǎn)除法(保留小數(shù)部分,即使整除);//執(zhí)行Floor除法,截除掉余數(shù)并且針對(duì)整數(shù)操作數(shù)返回一個(gè)整數(shù),如果有任何一個(gè)操作數(shù)是浮點(diǎn)數(shù),則返回一個(gè)浮點(diǎn)數(shù)。在Python3中,/總是執(zhí)行真除法,不管操作數(shù)的類型,都會(huì)返回包含任何余數(shù)的浮點(diǎn)結(jié)果;//執(zhí)行Floor除法,截除掉余數(shù)并且針對(duì)整數(shù)操作數(shù)返回一個(gè)整數(shù),如果有任何一個(gè)操作數(shù)是浮點(diǎn)數(shù),則返回一個(gè)浮點(diǎn)數(shù)。
int/long:Python3里,只有一種整數(shù)類型int,大多數(shù)情況下,它很像Python2里的長(zhǎng)整型。Python2有為非浮點(diǎn)數(shù)準(zhǔn)備的int和long類型。int類型的最大值不能超過(guò)sys.maxint,而且這個(gè)最大值是平臺(tái)相關(guān)的。
True和False:在Python2中,True和False是兩個(gè)全局變量(名字),在數(shù)值上分別對(duì)應(yīng)1和0,既然是變量,那么它們就可以指向其它對(duì)象。Python3修正了這個(gè)缺陷,True和False變?yōu)閮蓚€(gè)關(guān)鍵字,永遠(yuǎn)指向兩個(gè)固定的對(duì)象,不允許再被重新賦值。
迭代器:在Python2中很多返回列表對(duì)象的內(nèi)置函數(shù)和方法在Python3都改成了返回類似于迭代器的對(duì)象,因?yàn)榈鞯亩栊约虞d特性使得操作大數(shù)據(jù)更有效率。
例如:Python2中使用xrange()來(lái)創(chuàng)建一個(gè)迭代器對(duì)象,使用range()創(chuàng)建一個(gè)list數(shù)組(要生成很大的數(shù)字序列的時(shí)候,用xrange會(huì)比range性能優(yōu)很多,因?yàn)椴恍枰簧蟻?lái)就開(kāi)辟一塊很大的內(nèi)存空間);Python3中使用range()創(chuàng)建迭代器對(duì)象,移除了xrange()方法。
另外,字典對(duì)象的dict.keys()、dict.values()方法都不再返回列表,而是以一個(gè)類似迭代器的view對(duì)象返回。高階函數(shù)map、filter、zip返回的也都不是列表對(duì)象了。Python2的迭代器必須實(shí)現(xiàn)next方法,而Python3改成了__iter__()、next。
nonlocal:在Python2中可以在函數(shù)里面可以用關(guān)鍵字global聲明某個(gè)變量為全局變量,但是在嵌套函數(shù)中,想要給一個(gè)變量聲明為非局部變量是沒(méi)法實(shí)現(xiàn)的,在Pyhon3,新增了關(guān)鍵字nonlcoal,一般使用在閉包中的,使變量使用外層的同名變量。
LEGB作用域的理解:python3的local, global, nonlocal簡(jiǎn)析
“Python語(yǔ)言和其他語(yǔ)言有什么區(qū)別”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!