這裡Python的str和int為什麼不能連在一起

時間 2021-05-10 05:36:06

1樓:est

str + str 的寫法其實也是錯誤的。正確的寫法是 '%s%s' % (s1, s2)

從這個角度來說,'%s' % 1 是成立的。

2樓:zhouzhou

不同型別的是無法想加的。你可以這樣寫

print("你好,!".format(name))語法應該沒錯。

by:ide重度依賴患者

3樓:DavyCloud

不是不能,而是 Python 不要這樣實現,因為這個違背了 Zen of Python

首先要搞清楚 Python 中的資料型別是不能(像C/C++語言那樣強制型別)轉換的,字串和數字都是所謂的不可變物件。

也就是說 :

x = 1

你沒法把 x 當前的物件修改成 2;

當執行 x = 2 的時候,實際上是重新在新的記憶體位址建立了乙個 2 ;

這一點可以通過 id(x) 來觀察。

同型別尚且如此,不同的型別當然更不可能存在「強制轉換」,所以按照 C/C++ 語言的那種強制型別轉換來理解 Python 是錯誤的。

所謂的 int('123') - > int 只是一種替換而已,更直白點說,就是 class int 類在例項化的時候能夠接受字串作為引數罷了。因為這個需求(把字串形式的數字轉成真正的數字型別)很明確,所以 Python 內建的這個實現。

而字串和數字相加,則並沒有那麼明確。

如果使用者有需求,應該自己顯式地處理,事實上這種時候可以很輕鬆的通過字串的 format 實現。

4樓:默默

因為 Python 沒法替你決定是按照字串連線起來,還是按照數字相加起來。

可以繼承字串這個類,然後重寫它的__add__ 方法(數字應該是__radd__),實現字串與數字的連線,或者將字串轉為數字與數字相加。

5樓:蕭涵

首先,撇去語言因素,你就考慮一下,字串和整數相加的本質意義。

「2.0」 + 1

結果「應該」是什麼?

「3.0」?「2.01」?3.0?這幾個答案都是可解釋的。

「a」 + 1呢?貌似只有一種合理的解釋「a1」。

python中字串加法要求引數必須是字串更加簡潔明瞭Explicit is better than implicit

6樓:划船協會

我只想說,你們只會c的非要來答什麼python的問題。這不是語法決定的,更不是什麼編譯原理的問題(我甚至懷疑某些人的編譯原理到底及格了沒有)。

str不能加int當然只是加號過載的方法裡故意不允許這個型別而已。顯然,如果不是字面量的話,在編譯的語法分析期python連加號兩側是什麼型別都不知道……

7樓:

1.py設計上在這種情況下不會對型別進行轉化,也有會自己轉化的語言,方便的同時也會照成非常多的困惑,所以使用中更傾向不用讓程式自己進行轉化,而是手動

2.有很多方法在乙個變數裡面同時放入int和str,但在這種情況下不行。這個也是語言設計的原因,這是經過歷史檢驗很科學的設計,現在理解不了可以不用問為什麼

cumulative voting和straight voting的區別是什麼?

長弓重錘 搜一下不就行了?Cumulative voting refers to the fact that a shareholder has votes that are equal to the number of shares multiplied by the number of posi...

Python3 str在記憶體中的儲存方式?

Coldwings 這種問題就應該去看原始碼。就算不看原始碼,看文件啊 對於Py3.5而言 enum PyUnicode Kind Return pointers to the canonical representation cast to unsigned char,Py UCS2,or Py ...

為什麼這裡python列表的sort比c STL的sort排序還要快?

tearshark 因為你用的debug版在跑。I7 6600U 2.6GHz的CPU,資料從大到小排列,排序成從小到大 1000000,用時16ms。10000000,用時168ms。資料採用rand 函式隨機,排序成從小到大 1000000,用時74ms。10000000,用時648ms。con...