Python動(dòng)態(tài)強(qiáng)類(lèi)型解釋型語(yǔ)言原理解析
PYTHON是一門(mén)動(dòng)態(tài)解釋性的強(qiáng)類(lèi)型定義語(yǔ)言:編寫(xiě)時(shí)無(wú)需定義變量類(lèi)型;運(yùn)行時(shí)變量類(lèi)型強(qiáng)制固定;無(wú)需編譯,在解釋器環(huán)境直接運(yùn)行。
動(dòng)態(tài)和靜態(tài)
靜態(tài)語(yǔ)言:是指在編譯時(shí)變量的數(shù)據(jù)類(lèi)型即可確定的語(yǔ)言,多數(shù)靜態(tài)類(lèi)型語(yǔ)言要求在使用變量之前必須聲明數(shù)據(jù)類(lèi)型。例如:C++、Java、Delphi、C# 、go等。
動(dòng)態(tài)語(yǔ)言:是在運(yùn)行時(shí)確定數(shù)據(jù)類(lèi)型的語(yǔ)言。變量使用之前不需要類(lèi)型聲明,通常變量的類(lèi)型是被賦值的那個(gè)值的類(lèi)型。例如:Python、Ruby、Perl等。
強(qiáng)類(lèi)型和弱類(lèi)型
強(qiáng)類(lèi)型和弱類(lèi)型主要是站在變量類(lèi)型處理的角度進(jìn)行分類(lèi)的。
強(qiáng)類(lèi)型是指不允許隱式變量類(lèi)型轉(zhuǎn)換,弱類(lèi)型則允許隱式類(lèi)型轉(zhuǎn)換。
所以,關(guān)鍵在于變量數(shù)據(jù)類(lèi)型的轉(zhuǎn)換。
什么叫隱式類(lèi)型轉(zhuǎn)換?
隱式是指源碼中沒(méi)有明顯的類(lèi)型轉(zhuǎn)換代碼,也就是說(shuō),一個(gè)變量,你可以直接給他賦值字符串,也可以直接給他賦值數(shù)值,你還可以直接讓字符串類(lèi)型的變量和數(shù)值類(lèi)型的變量相加,雖然得出的最終結(jié)果未必是你想象的那樣,但一定不會(huì)報(bào)錯(cuò)。
這就是隱式類(lèi)型轉(zhuǎn)換,弱類(lèi)型語(yǔ)言,如javascript、php。
Java是強(qiáng)類(lèi)型語(yǔ)言,不允許隱式類(lèi)型轉(zhuǎn)換,也就是說(shuō),如果你需要拿一個(gè)字符串變量當(dāng)做整型來(lái)用,你必須顯式地將變量類(lèi)型轉(zhuǎn)換好。
換句話說(shuō):
- 強(qiáng)類(lèi)型語(yǔ)言,當(dāng)你定義一個(gè)變量是某個(gè)類(lèi)型,如果不經(jīng)過(guò)代碼顯式轉(zhuǎn)換(強(qiáng)制轉(zhuǎn)化)過(guò),它就永遠(yuǎn)都是這個(gè)類(lèi)型,如果把它當(dāng)做其他類(lèi)型來(lái)用,就會(huì)報(bào)錯(cuò)
- 弱類(lèi)型語(yǔ)言,你想把這個(gè)變量當(dāng)做什么類(lèi)型來(lái)用,就當(dāng)做什么類(lèi)型來(lái)用,語(yǔ)言的解析器會(huì)自動(dòng)(隱式)轉(zhuǎn)換。
優(yōu)點(diǎn):
Python的定位是“優(yōu)雅”、“明確”、“簡(jiǎn)單”,所以Python程序看上去總是簡(jiǎn)單易懂,初學(xué)者學(xué)Python,不但入門(mén)容易,而且將來(lái)深入下去,可以編寫(xiě)那些非常非常復(fù)雜的程序。
開(kāi)發(fā)效率非常高,Python有非常強(qiáng)大的第三方庫(kù),基本上你想通過(guò)計(jì)算機(jī)實(shí)現(xiàn)任何功能,Python官方庫(kù)里都有相應(yīng)的模塊進(jìn)行支持,直接下載調(diào)用后,在基礎(chǔ)庫(kù)的基礎(chǔ)上再進(jìn)行開(kāi)發(fā),大大降低開(kāi)發(fā)周期,避免重復(fù)造輪子。
- 高級(jí)語(yǔ)言————當(dāng)你用Python語(yǔ)言編寫(xiě)程序的時(shí)候,你無(wú)需考慮諸如如何管理你的程序使用的內(nèi)存一類(lèi)的底層細(xì)節(jié)
- 可移植性————由于它的開(kāi)源本質(zhì),Python已經(jīng)被移植在許多平臺(tái)上(經(jīng)過(guò)改動(dòng)使它能夠工 作在不同平臺(tái)上)。如果你小心地避免使用依賴(lài)于系統(tǒng)的特性,那么你的所有Python程序無(wú)需修改就幾乎可以在市場(chǎng)上所有的系統(tǒng)平臺(tái)上運(yùn)行
- 可擴(kuò)展性————如果你需要你的一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開(kāi),你可以把你的部分程序用C或C++編寫(xiě),然后在你的Python程序中使用它們。
- 可嵌入性————你可以把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。
缺點(diǎn):
速度慢,Python 的運(yùn)行速度相比C語(yǔ)言確實(shí)慢很多,跟JAVA相比也要慢一些,因此這也是很多所謂的大牛不屑于使用Python的主要原因,但其實(shí)這里所指的運(yùn)行速度慢在大多數(shù)情況下用戶是無(wú)法直接感知到的,必須借助測(cè)試工具才能體現(xiàn)出來(lái),比如你用C運(yùn)一個(gè)程序花了0.01s,用Python是0.1s,這樣C語(yǔ)言直接比Python快了10倍,算是非??鋸埩?,但是你是無(wú)法直接通過(guò)肉眼感知的,因?yàn)橐粋€(gè)正常人所能感知的時(shí)間最小單位是0.15-0.4s左右,哈哈。其實(shí)在大多數(shù)情況下Python已經(jīng)完全可以滿足你對(duì)程序速度的要求,除非你要寫(xiě)對(duì)速度要求極高的搜索引擎等,這種情況下,當(dāng)然還是建議你用C去實(shí)現(xiàn)的。
代碼不能加密,因?yàn)镻YTHON是解釋性語(yǔ)言,它的源碼都是以名文形式存放的,不過(guò)我不認(rèn)為這算是一個(gè)缺點(diǎn),如果你的項(xiàng)目要求源代碼必須是加密的,那你一開(kāi)始就不應(yīng)該用Python來(lái)去實(shí)現(xiàn)。
線程不能利用多CPU問(wèn)題,這是Python被人詬病最多的一個(gè)缺點(diǎn),GIL即全局解釋器鎖(Global Interpreter Lock),是計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言解釋器用于同步線程的工具,使得任何時(shí)刻僅有一個(gè)線程在執(zhí)行,Python的線程是操作系統(tǒng)的原生線程。在Linux上為pthread,在Windows上為Win thread,完全由操作系統(tǒng)調(diào)度線程的執(zhí)行。一個(gè)python解釋器進(jìn)程內(nèi)有一條主線程,以及多條用戶程序的執(zhí)行線程。即使在多核CPU平臺(tái)上,由于GIL的存在,所以禁止多線程的并行執(zhí)行。關(guān)于這個(gè)問(wèn)題的折衷解決方法,我們?cè)谝院缶€程和進(jìn)程章節(jié)里再進(jìn)行詳細(xì)探討。
- 編譯型語(yǔ)言:把做好的源程序全部編譯成二進(jìn)制代碼的可運(yùn)行程序。然后,可直接運(yùn)行這個(gè)程序。
- 解釋型語(yǔ)言:把做好的源程序翻譯一句,然后執(zhí)行一句,直至結(jié)束!
區(qū)別:
- 編譯型語(yǔ)言,執(zhí)行速度快、效率高;依靠編譯器、跨平臺(tái)性差些。
- 解釋型語(yǔ)言,執(zhí)行速度慢、效率低;依靠解釋器、跨平臺(tái)性好。
個(gè)人認(rèn)為,java是解釋型的語(yǔ)言,因?yàn)殡m然java也需要編譯,編譯成.class文件,但是并不是機(jī)器可以識(shí)別的語(yǔ)言,而是字節(jié)碼,最終還是需要 jvm的解釋?zhuān)拍茉诟鱾€(gè)平臺(tái)執(zhí)行,這同時(shí)也是java跨平臺(tái)的原因。所以可是說(shuō)java即是編譯型的,也是解釋型,但是假如非要?dú)w類(lèi)的話,從概念上的定義,恐怕java應(yīng)該歸到解釋型的語(yǔ)言中。
附:
- 編譯型的語(yǔ)言包括:C、C++、Delphi、Pascal、Fortran
- 解釋型的語(yǔ)言包括:Java、Basic、javascript
編譯型語(yǔ)言要先編譯再運(yùn)行,而解釋性語(yǔ)言直接“運(yùn)行”源代碼。
Python是種強(qiáng)類(lèi)型的語(yǔ)言。
有人可能會(huì)問(wèn),在python中,可以這樣寫(xiě)而不報(bào)錯(cuò),所以是弱類(lèi)型的:
i=1
print(i)
i="hello world"
print(i)
實(shí)際上,這里python表現(xiàn)出的特性為,他是一種動(dòng)態(tài)類(lèi)型語(yǔ)言。動(dòng)態(tài)類(lèi)型語(yǔ)言是一種在運(yùn)行期間才去確定數(shù)據(jù)類(lèi)型的語(yǔ)言,與靜態(tài)類(lèi)型相反。
VBScript 和 Python 是動(dòng)態(tài)類(lèi)型的,因?yàn)樗鼈兇_定一個(gè)變量的類(lèi)型是在您第一次給它賦值的時(shí)候。靜態(tài)類(lèi)型語(yǔ)言是一種在編譯期間就確定數(shù)據(jù)類(lèi)型的語(yǔ)言。大多數(shù)靜態(tài)類(lèi)型語(yǔ)言是通過(guò)要求在使用任一變量之前聲明其數(shù)據(jù)類(lèi)型來(lái)保證這一點(diǎn)的。Java 和 C 是靜態(tài)類(lèi)型語(yǔ)言。
Python 是強(qiáng)制類(lèi)型定義的。指的是加入我們有一個(gè)整數(shù),如果不明確地進(jìn)行轉(zhuǎn)換 ,不能將把它當(dāng)成一個(gè)字符串,所以顯然,C/C++和Java都是強(qiáng)類(lèi)型語(yǔ)言。 弱類(lèi)型語(yǔ)言與強(qiáng)類(lèi)型相反。VBScript 是弱類(lèi)型的。在 VBScript 中,我們可以將字符串 '12' 和整數(shù) 3 進(jìn)行連接得到字符串'123',然后可以把它看成整數(shù) 123 ,所有這些都不需要任何的顯示轉(zhuǎn)換。
總結(jié)起來(lái),Python是一種動(dòng)態(tài)的,強(qiáng)類(lèi)型語(yǔ)言。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python動(dòng)態(tài)語(yǔ)言與鴨子類(lèi)型詳解
- python動(dòng)態(tài)性強(qiáng)類(lèi)型用法實(shí)例
- python進(jìn)階教程之動(dòng)態(tài)類(lèi)型詳解
- Python實(shí)現(xiàn)爬取網(wǎng)頁(yè)中動(dòng)態(tài)加載的數(shù)據(jù)
- Python調(diào)用.net動(dòng)態(tài)庫(kù)實(shí)現(xiàn)過(guò)程解析
- Python繪制動(dòng)態(tài)水球圖過(guò)程詳解
- 基于Python繪制美觀動(dòng)態(tài)圓環(huán)圖、餅圖
- Python動(dòng)態(tài)類(lèi)型實(shí)現(xiàn)原理及過(guò)程解析
相關(guān)文章
python簡(jiǎn)單商城購(gòu)物車(chē)實(shí)例代碼
這篇文章主要為大家詳細(xì)介紹了python簡(jiǎn)單商城購(gòu)物車(chē)的實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
分享一枚pycharm激活碼適用所有pycharm版本我的pycharm2020.2.3激活成功
這篇文章主要分享一枚pycharm激活碼適用所有pycharm版本我的pycharm2020.2.3激活成功,需要的朋友可以參考下2020-11-11
jupyter安裝失敗的解決,問(wèn)題出在rust環(huán)境和32位python
文章講述了如何解決在安裝Jupyter Notebook時(shí)遇到的問(wèn)題,包括安裝Rust和選擇合適的Python版本(64位)來(lái)避免兼容性問(wèn)題2025-02-02
Python實(shí)現(xiàn) PS 圖像調(diào)整中的亮度調(diào)整
這篇文章主要介紹了Python實(shí)現(xiàn) PS 圖像調(diào)整中的亮度調(diào)整 ,需要的朋友可以參考下2019-06-06
解決nohup重定向python輸出到文件不成功的問(wèn)題
今天小編就為大家分享一篇解決nohup重定向python輸出到文件不成功的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
pycharm 實(shí)現(xiàn)調(diào)試窗口恢復(fù)
這篇文章主要介紹了pycharm 實(shí)現(xiàn)調(diào)試窗口恢復(fù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
如何使用Python標(biāo)準(zhǔn)庫(kù)進(jìn)行性能測(cè)試
這篇文章主要為大家詳細(xì)介紹了如何使用Python標(biāo)準(zhǔn)庫(kù)進(jìn)行性能測(cè)試,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
使用PyCharm調(diào)試程序?qū)崿F(xiàn)過(guò)程
這篇文章主要介紹了使用PyCharm調(diào)試程序?qū)崿F(xiàn)過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11

