簡體   English   中英

為什么Python在連接字符串時不執行類型轉換?

[英]Why does Python not perform type conversion when concatenating strings?

在Python中,以下代碼會產生錯誤:

a = 'abc'
b = 1
print(a + b)

(錯誤是“TypeError:無法連接'str'和'int'對象”)。

為什么Python解釋器在遇到這些類型的串聯時不會自動嘗試使用str()函數?

問題是轉換是不明確的,因為+表示字符串連接數字加法 以下問題同樣有效:

為什么Python解釋器在遇到這些類型的添加時不會自動嘗試使用int()函數?

這正是松散打字的問題,不幸的是折磨了Javascript。

這種操作存在很大程度的模糊性。 假設這種情況:

a = '4'
b = 1
print(a + b)

目前尚不清楚a是否應該被強制轉換為整數(導致5 ),或者b是否應該被強制轉換為字符串(導致'41' )。 由於類型雜耍規則是可傳遞的,因此將數字字符串傳遞給期望數字的函數可能會讓您遇到麻煩,尤其是因為幾乎所有算術運算符都對字符串進行了重載操作。

例如,在Javascript中,為了確保處理整數而不是字符串,通常的做法是將變量乘以1; 在Python中,乘法運算符重復字符串,因此'41' * 1是無操作。 最好是讓開發人員澄清一下。

簡短的回答是因為Python是一種強類型語言。

這是Guido做出的設計決定。 它可能是這樣或那樣的,將strint連接到strint

最好的解釋,仍然是圭多給出的,您可以在這里查看

其他答案提供了很好的解釋,但沒有提到這個功能被稱為強類型。 執行隱式轉換的語言是弱類型。

因為Python在連接字符串時不執行類型轉換。 這種行為是設計使然,當您需要將對象強制轉換為字符串或數字時,您應養成執行顯式類型轉換的習慣。

將您的代碼更改為:

a = 'abc'
b = 1
print(a + str(b))

你會看到理想的結果。

Python必須知道字符串中的內容才能正確執行。 有一個模棱兩可的案例: '5' + 5應該產生什么? 一個數字還是一個字符串? 那肯定會引發錯誤。 現在要確定這種情況是否成立,python必須檢查要告訴的字符串。 每次嘗試連接或添加兩個東西時它應該這樣做嗎? 最好讓程序員明確地轉換字符串。

更一般地說,像這樣的隱式轉換只是簡單的混亂! 它們難以預測,難以閱讀,難以調試。

告訴python int是一個消除'+'操作歧義的列表。

['foo', 'bar'] + [5]

這會返回:['foo','bar',5]

這就是他們決定設計語言的方式。 可能的理由是,要求對字符串進行顯式轉換會降低意外行為的可能性(例如,如果兩個操作數恰好是整數而不是字符串,則為整數加法)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM