Python到底是強(qiáng)類型語言,還是弱類型語言?

來源 |?Python貓
關(guān)于Python到底是 強(qiáng)類型 還是 弱類型 語言,網(wǎng)絡(luò)上真的是百家爭鳴,甚至還有些Python書本都定義錯誤,導(dǎo)致很多人都理解錯誤。
今天我們就來深度探討一下:Python 到底是不是強(qiáng)類型語言?
0、前言
1、動靜類型與強(qiáng)弱類型
動態(tài)類型與靜態(tài)類型,但是很多人也會把它們跟強(qiáng)弱類型混為一談,所以我們有必要先作一下概念上的澄清。"1000"+1會得到字符串“10001”,而 "1000"-1則會得到數(shù)字 999,也就是說,編譯器根據(jù)使用場合,對兩種不同類型的對象分別做了隱式的類型轉(zhuǎn)化,但是相似的寫法,在強(qiáng)類型語言中則會報類型出錯。(數(shù)字與字符串的轉(zhuǎn)化屬于過分的轉(zhuǎn)化,下文會再提到一些合理的轉(zhuǎn)化。)
強(qiáng)類型:Java、C#、Python、Ruby、Erlang(再加GO、Rust)…… 弱類型:C、C++、Javascript、Perl、PHP、VB……
2、過去的強(qiáng)弱類型概念

In 1974, Liskov and Zilles defined a strongly-typed language as one in which "whenever an object is passed from a calling function to a called function, its type must be compatible with the type declared in the called function."[3] In 1977, Jackson wrote, "In a strongly typed language each data area will have a distinct type and each process will state its communication requirements in terms of these types."[4]
3、現(xiàn)在的強(qiáng)弱類型概念

Strongly checked language: A language where no forbidden errors can occur at run time (depending on the definition of forbidden error). Weakly checked language: A language that is statically checked but provides no clear guarantee of absence of execution errors.

A weakly typed language has looser typing rules and may produce unpredictable results or may perform implicit type conversion at runtime.

4、Python 是不是強(qiáng)類型語言?
"test"*3這種字符串“乘法”運(yùn)算,雖然是兩種類型的操作,但是并不涉及隱式類型轉(zhuǎn)換轉(zhuǎn)化。x=10; x="test"先后給一個變量不同類型的賦值,表面上看 x 的類型變化了,用 type(x) 可以判斷出不同,但是,Python 中的類型是跟值綁定的(右值綁定),并不是跟變量綁定的。1 + True這種數(shù)字與布爾類型的加法運(yùn)算,也沒有發(fā)生隱式類型轉(zhuǎn)換。因為 Python 中的布爾類型其實是整型的子類,是同一種類型?。ㄈ绻幸蓡?,可查閱 PEP-285)__add__()方法,Python 中一切皆對象,數(shù)字對象也有自己的方法。(其它語言可不一定)5、其它相關(guān)的問題
123 + null結(jié)果為 123,123 + {}結(jié)果為字符串“123[object Object]”。true==['2']判斷出的結(jié)果為 false,而true==['1']的結(jié)果是 true,還有[]==![]和[undefined]==false的結(jié)果都為 true……6、小結(jié)
相關(guān)鏈接
評論
圖片
表情
