今天寫程序,想輸出一個array的shape,原程序為:
print('shape of testUImatrix:%s\nStart to make testUImatrix...'%(testuimat.shape))
結果報錯:
TypeError: not all arguments converted during string formatting
這句話有什么問題嘛??感覺有點奇怪,之后google到了這個網頁https://segmentfault.com/q/1010000000334606 , 覺得答案挺有價值的,也解決了我一直以來的一個困惑,即元組tuple(a)和(a,)的區別
原來(摘抄):
python認為用","連接起來的全部都認為是元組,()只是便於程序員感知的一個符號而已。回到上面的問題
print "%s,%s" % (a,b)
這里a,b python認為它是一個元組整體c=(1,('2','3')),不再作為兩個單獨的對象。那么對元組c里每個值都單獨格式化,第一個%s就是c的第一個值1,第二個就是c的第二個值('2','3')
print "%s" % b
對元組b里每個值都單獨格式化,b有兩個值,而%s只有一個所以會報錯。
print "%s" % (b,)
實際上(b,)被當成了一個只有元素b的元組,因此這種寫法也能正確print整個元組。