print 列印是會調用對象 __str_ 方法,輸出方法返回值,當然返回值必須是 str,內置對象例如int,list,dict,bool等等都已經實現了這個方法,當然如果沒實現這個方法,會默認輸出對象名稱和內存ID。

單獨列印這些對象都不會有這個問題,但是你將兩個對象用 + 連接起來,+ 會調用+前面對象的 __add__ 方法,str的+是連接字元串,返回值是str,list的+是擴展列表,返回值是list。這裡你用 str+list,不同類型的變數當然不能直接+。

如果相同時輸出兩個不同類型變數的值,可以像下面這樣,不同變數用「,」隔開

print("here ......",cars)


其實錯誤提示已經講得很清楚:出現了類型錯誤 -- 只能連接字元串到字元串,而不能將列表連接到字元串。

問題就出在加號的使用上,這句提示就是針對加號來說的,就是說不能將字元串和列表「加」在一起:cars 是列表, 用 sorted() 函數來排序後的 sorted(cars) 還是列表,print ("He is ..." + sorted(cars)) 就是將字元串和列表「加」在一起了,所以會報錯。

上面說了,字元串可以連接(「加」)到字元串, str (sorted(cars)) 就是將排序好的列表整體「變成」了一個字元串,即 "[a, b, c, d]" , 所以 print(" here is ..." + str (sorted(cars))) 就可以順利顯示了。

而 print(sorted(cars)) 與 print(cars) 原理是一樣的,能夠順利顯示肯定沒有什麼好奇怪的。

就像其他朋友所說的,要想將不同類型的對象放在一起(注意是放在一起,而不是連接或者「加」在一起)來顯示(print),可以使用英文的逗號,比如您將上面的例子改為 print("He is ... " , sorted(cars)) 就能夠順利顯示了。

這些規則是發明者制定的,使用者只能乖乖地遵守了,否則機器肯定不讓您通過,呵呵。

再次謝邀,祝順利、愉快。


這不是print的問題,print函數你放進去什麼都可以列印,因為在列印的時候會自動轉為str。

上面報錯的原因是把字元串"Here is the sorted list :"與後面的列表sorted(cars)相加,字元串與列表是不能相加的,所以報錯。而後面直接列印列表是允許的


+號連接的是字元串和字元串。上面那個,後面部分是list,所以報錯了。下面那個是因為你把後面部分的list用str強制類型轉換成字元串了,所以能夠用+號連接。這跟print沒什麼關係。


報錯信息很明顯,只能str和str拼接

str和list拼接需要強制轉換為相同類型,就這樣


推薦閱讀:
相關文章