為什麼說 Python 是強型別語言?

時間 2021-05-29 22:56:36

1樓:Python-Jack

強弱只是相對的乙個概念,我覺得區分動態型別和靜態型別對理解程式語言更為關鍵,如果要區分強弱,必須上公升到哲學的高度,而且這個並沒有特別實際的意義。舉個例子,你很有可能認為三角形的內角和理所當然的應該是180度,其實這只是因為你學習的幾何學是歐氏幾何學,如果你了解過羅巴切夫斯基幾何和黎曼幾何,你會發現三角形的內角和可以小於180度,也可以大於180度。信奉歐氏幾何的不能說信奉非歐幾何的是傻子吧,反之亦然。

科學的邊界是哲學,哲學的邊界是宗教。

2樓:NumberOne

今天看了廖先生的回答後突然覺得這個問題意義不是很大,因為確實在於不同人的不同理解,像李剛先生就把Python劃定為弱型別語言。其實仔細想想也並不無道理。

3樓:網仙

2020-7-7更新:

時隔多年回來看了這個問題,發現很多朋友對下面這些概念是混淆的:

強型別:如果一門語言傾向於不對變數的型別做隱式轉換,那我們將其稱之為強型別語言

弱型別:相反,如果一門語言傾向於對變數的型別做隱式轉換,那我們則稱之為弱型別語言

動態型別:如果一門語言可以在執行時改變變數的型別,那我們稱之為動態型別語言

靜態型別:相反,如果一門語言不可以在執行時改變變數的型別,則稱之為靜態型別語言

弄清楚了這些基本概念後,我們可以看下python的一些行為:

首先,python不傾向於對變數的型別做隱式轉換,因此是一門強型別語言:

a = 1

b = "1"

a < b // Type error

a == b // false,符合==的意思,型別都不一樣顯然是不相等的

1 + 1.1 // 2.1,為了符合直覺做了隱式轉換

其次,python可以在執行時改變變數的型別,因此python是一門動態型別語言:

a = 1

a = "1" // 不會報錯

因此我們可以得知:python是一門強型別動態語言。下列是原答案(涉及的書名是《流暢的python》):

反對@劉哲奇的答案。

首先在Python中=是重新賦值的意思,並不是對比。其二是判斷乙個語言是否是強型別語言的標準只有乙個:

如果語言經常隱式地轉換變數的型別,那這個語言就是弱型別語言,如果很少會這樣做,那就是強型別語言。

Python很少會隱式地轉換變數的型別,所以Python是強型別的語言。

針對題主的問題:Python並不會隱式地轉換int或其他型別的變數的型別為bool型,而是變數的類中的__bool__方法讓大家產生了這種錯覺。Python在判斷乙個變數的布林值時,如果該變數有__bool__方法,那麼直譯器就會呼叫該方法判斷變數是否為真,注意是邏輯上的變數是否為真而不是變數的值等於真。

延伸:然而這是什麼情況?

我們可以去看看bool類的原始碼:

原來在Python中,bool類的父類是int……所以實際上:

在Python中==其實呼叫的是__eq__方法,而bool類繼承自int類,又沒有重寫__eq__方法,所以在使用==的時候,bool類的物件自然就會呼叫父類的__eq__方法了,自然就會出現上面的這種情況了。

4樓:陳二白

強語言型別,

兩個不同型別相加會出現

typeerror

如下當弱型別相加的時候

你看並不會出現typeerror.

但是你會蛋疼的發現結果不正確,但是程式又不報錯,也不異常。你不感受到深深的惡意嗎?

對這個問題進行簡單的概括

就是上邊的樣子,大家可以做乙個簡單的判斷。以上

為什麼 Python 不支援函式過載?而其他語言大都支援?

jijidawang 舉個例子,C 中的函式過載 void input inta void input chara void input doublea Python 呢 definput a a input C void helloworld inta 233 void helloworld in...

python有什麼類似特性(或者是解釋型語言特性)?

除非你想走編譯原理等方向否則不建議去鑽牛角尖 想這個東西是怎麼實現的 Coldwings 已經從編譯原理的基礎 語法樹 方向做了乙個很專業的回答 從提問來看你很需要乙個基礎的邏輯 語言感,也就是說你需要先知道基本邏輯運算 條件控制 變數等東西,然後你才可以更進一步去知道 這個東西是怎麼實現的 否則一...

為什麼有人說 Python 的多執行緒是雞肋呢?

確實雞肋,主要原因是因為GIL。但執行緒依然很有用 很多人提到協程,如果沒有ThreadPoolExecutor很多任務只能阻塞eventloop。編寫c模組的時候,還可以釋放GIL,跑滿多核也不難。這導致對很多科學計算的任務其實用threadpool都能突破GIL限制。 CPython直譯器並不是...