![](/img/trans.png)
[英]When does Python perform type conversion when comparing int and float?
[英]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在連接字符串時不執行類型轉換。 這種行為是設計使然,當您需要將對象強制轉換為字符串或數字時,您應養成執行顯式類型轉換的習慣。
將您的代碼更改為:
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.