溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python語言和其他語言有什么區(qū)別

發(fā)布時間:2021-11-23 09:59:50 來源:億速云 閱讀:178 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“Python語言和其他語言有什么區(qū)別”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

1、談?wù)剬ython的了解和其他語言的區(qū)別?

Python是一門語法簡潔優(yōu)美,功能強(qiáng)大無比,應(yīng)用領(lǐng)域非常廣泛,具有強(qiáng)大完備的第三方庫的一門強(qiáng)類型的動態(tài),可移植,可擴(kuò)展,可嵌入的解釋型編程語言。

強(qiáng)類型語言、弱類型語言的區(qū)別:

如果語言經(jīng)常隱式地轉(zhuǎn)換變量的類型,那這個語言就是弱類型語言,如果很少會這樣做,那就是強(qiáng)類型語言。Python很少會隱式地轉(zhuǎn)換變量的類型,所以Python是強(qiáng)類型的語言。

強(qiáng)類型語言和弱類型原因其判斷的根本是是否會隱式進(jìn)行語言類型轉(zhuǎn)變。強(qiáng)類型原因在速度上可能略遜于弱類型語言,但是強(qiáng)類型定義語帶來的嚴(yán)謹(jǐn)性又避免了不必要的錯誤。

強(qiáng)類型語言包括:Java、.net、Python、C++等語言。其中Python是動態(tài)語言,是強(qiáng)類型定義語言,是類型安全的語言,Java是靜態(tài)語言,是強(qiáng)類型定義語言,也是類型安全的語言;弱類型語言包括:VB,PHP,JavaScript等語言。其中VBScript是動態(tài)語言,是一種類型不安全的原因。動態(tài)語言、靜態(tài)語言的區(qū)別:

動態(tài)類型語言:動態(tài)性語言是指在運(yùn)行期間才去做數(shù)據(jù)類型檢查的語言,也就是說動態(tài)類型語言編程時,永遠(yuǎn)不用給任何變量指定數(shù)據(jù)類型,該語言會在第一次賦值給變量時,在內(nèi)部將數(shù)據(jù)類型記錄下來**。Python和Ruby就是一種典型的動態(tài)類型語言,其他的各種腳本語言如VBScript也多少屬于動態(tài)類型語言。

靜態(tài)類型語言:靜態(tài)類型語言與動態(tài)類則剛好相反,它的數(shù)據(jù)類型在編譯期間檢查,也就是說在寫程序時要聲明所有變量的數(shù)據(jù)類型,C/C++是靜態(tài)類型語言的典型代表,其他靜態(tài)語言還有C#、Java等。

對于動態(tài)語言與靜態(tài)語言的區(qū)分,其根本在于數(shù)據(jù)類型是在運(yùn)行期間檢查還是在編譯期間檢查。編譯型語言、解釋型語言的區(qū)別:

編譯型語言:需要將一段程序直接翻譯成機(jī)器碼(對于C/C++這種非跨平臺的語言)或者中間碼(Java這種跨平臺語言,需要虛擬機(jī)再將中間碼印射成機(jī)器碼)。一般需經(jīng)過編譯(compile)、鏈接(linker)這兩個步驟。編譯是把源代碼編譯成機(jī)器碼,鏈接是把各個模塊的機(jī)器碼和依賴庫串連起來生成可執(zhí)行文件。

解釋型語言:使用解釋器將源碼逐行解釋成機(jī)器碼并立即執(zhí)行,不會進(jìn)行整體性的編譯和鏈接處理,相比編譯型語言省了道工序。

一個像是吃飯等菜都上全了再開動,一個像是吃火鍋,邊涮邊吃,時機(jī)不一樣。

解釋型語言的優(yōu)點(diǎn):跨平臺容易,只需提供特定平臺的解釋器;缺點(diǎn):每次運(yùn)行的時候都要解釋一遍,性能上不如編譯型語言。2、簡述解釋型和編譯型編程語言?

3、Python的解釋器種類以及相關(guān)特點(diǎn)?

CPython:官方版本的解釋器。這個解釋器是用C語言開發(fā)的,所以叫CPython。在命令行下運(yùn)行python就是啟動CPython解釋器。CPython是使用最廣的Python解釋器。

IPython:IPython是基于CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所增強(qiáng),但是執(zhí)行Python代碼的功能和CPython是完全一樣的。CPython用>>>作為提示符,而IPython用In [序號]:作為提示符。

PyPy:它的目標(biāo)是執(zhí)行速度。PyPy采用JIT技術(shù),對Python代碼進(jìn)行動態(tài)編譯(注意不是解釋),所以可以顯著提高Python代碼的執(zhí)行速度。絕大部分Python代碼都可以在PyPy下運(yùn)行,但是PyPy和CPython有一些是不同的,這就導(dǎo)致相同的Python代碼在兩種解釋器下執(zhí)行可能會有不同的結(jié)果。

Jython:Jython是運(yùn)行在Java平臺上的Python解釋器,可以直接把Python代碼編譯成Java字節(jié)碼執(zhí)行。

IronPython:IronPython和Jython類似,只不過IronPython是運(yùn)行在微軟.Net平臺上的Python解釋器,可以直接把Python代碼編譯成.Net的字節(jié)碼。4、說說你知道的Python3和Python2之間的區(qū)別?

編碼:Python2的默認(rèn)編碼是asscii,這也是導(dǎo)致Python2中經(jīng)常遇到編碼問題的原因之一,至于是為什么會使用asscii作為默認(rèn)編碼,原因在于Python這門語言誕生的時候還沒出現(xiàn)Unicode。Python3默認(rèn)采用了UTF-8作為默認(rèn)編碼,因此你不再需要在文件頂部寫# coding=utf-8了。

字符串:Python2中字符的類型,str:已經(jīng)編碼后的字節(jié)序列,unicode:編碼前的文本字符;而Python3中字符的類型,str:編碼過的unicode文本字符,bytes:編碼前的字節(jié)序列。

可以認(rèn)為字符串有兩種狀態(tài),即文本狀態(tài)和字節(jié)(二進(jìn)制)狀態(tài)。Python2和Python3中的兩種字符類型都分別對應(yīng)這兩種狀態(tài),然后相互之間進(jìn)行編解碼轉(zhuǎn)化。編碼就是將字符串轉(zhuǎn)換成字節(jié)碼,涉及到字符串的內(nèi)部表示;解碼就是將字節(jié)碼轉(zhuǎn)換為字符串,將比特位顯示成字符。

在Python2中,str和unicode都有encode和decode方法。但是不建議對str使用encode,對unicode使用decode, 這是Python2設(shè)計(jì)上的缺陷。Python3則進(jìn)行了優(yōu)化,str只有一個encode方法將字符串轉(zhuǎn)化為一個字節(jié)碼,而且bytes也只有一個decode方法將字節(jié)碼轉(zhuǎn)化為一個文本字符串。

print:Python2中的print是語句;Python3中的print是函數(shù)。例如:

# py2>>> print("hello", "world")('hello', 'world')# py3>>> print("hello", "world")hello world

這個例子就比較明顯了,在py2中,print語句后面接的是一個元組對象,而在py3中,print函數(shù)可以接收多個位置參數(shù)。如果希望在Python2中把print當(dāng)函數(shù)使用,那么可以導(dǎo)入future模塊中的print_function。

import:python2默認(rèn)是按照相對路徑導(dǎo)入模塊和包,python3默認(rèn)則是按照絕對路徑導(dǎo)入。

input:Python3:input解析輸入為str字符型;Python2:input解析輸入為int型,raw_input解析輸入為str類型。

算法符:在Python2中,/執(zhí)行傳統(tǒng)除法,對于整數(shù)執(zhí)行截?cái)喑?,浮點(diǎn)數(shù)執(zhí)行浮點(diǎn)除法(保留小數(shù)部分,即使整除);//執(zhí)行Floor除法,截除掉余數(shù)并且針對整數(shù)操作數(shù)返回一個整數(shù),如果有任何一個操作數(shù)是浮點(diǎn)數(shù),則返回一個浮點(diǎn)數(shù)。在Python3中,/總是執(zhí)行真除法,不管操作數(shù)的類型,都會返回包含任何余數(shù)的浮點(diǎn)結(jié)果;//執(zhí)行Floor除法,截除掉余數(shù)并且針對整數(shù)操作數(shù)返回一個整數(shù),如果有任何一個操作數(shù)是浮點(diǎn)數(shù),則返回一個浮點(diǎn)數(shù)。

int/long:Python3里,只有一種整數(shù)類型int,大多數(shù)情況下,它很像Python2里的長整型。Python2有為非浮點(diǎn)數(shù)準(zhǔn)備的int和long類型。int類型的最大值不能超過sys.maxint,而且這個最大值是平臺相關(guān)的。

True和False:在Python2中,True和False是兩個全局變量(名字),在數(shù)值上分別對應(yīng)1和0,既然是變量,那么它們就可以指向其它對象。Python3修正了這個缺陷,True和False變?yōu)閮蓚€關(guān)鍵字,永遠(yuǎn)指向兩個固定的對象,不允許再被重新賦值。

迭代器:在Python2中很多返回列表對象的內(nèi)置函數(shù)和方法在Python3都改成了返回類似于迭代器的對象,因?yàn)榈鞯亩栊约虞d特性使得操作大數(shù)據(jù)更有效率。

例如:Python2中使用xrange()來創(chuàng)建一個迭代器對象,使用range()創(chuàng)建一個list數(shù)組(要生成很大的數(shù)字序列的時候,用xrange會比range性能優(yōu)很多,因?yàn)椴恍枰簧蟻砭烷_辟一塊很大的內(nèi)存空間);Python3中使用range()創(chuàng)建迭代器對象,移除了xrange()方法。

另外,字典對象的dict.keys()、dict.values()方法都不再返回列表,而是以一個類似迭代器的view對象返回。高階函數(shù)map、filter、zip返回的也都不是列表對象了。Python2的迭代器必須實(shí)現(xiàn)next方法,而Python3改成了__iter__()、next。

nonlocal:在Python2中可以在函數(shù)里面可以用關(guān)鍵字global聲明某個變量為全局變量,但是在嵌套函數(shù)中,想要給一個變量聲明為非局部變量是沒法實(shí)現(xiàn)的,在Pyhon3,新增了關(guān)鍵字nonlcoal,一般使用在閉包中的,使變量使用外層的同名變量。

LEGB作用域的理解:python3的local, global, nonlocal簡析

“Python語言和其他語言有什么區(qū)別”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI