型別 列表生成 解包

pardon110發表於2019-11-16

型別系統是程式語言的基石。PHP 的資料型別是隱式存在,不同的資料型別之間運算,部分可以自動完成轉型。javagolang 都是強型別語言,型別需要顯性宣告,即便go型別推斷表現的像動態語言。

型別

python 從某種意義上來講,並非像PHP那樣完全動態,但使用 python 還是需要型別意識。

s="abc"
i=5
d={'Admin':28}
l=['a',23,('b','cc')]
print(s,i,d,l,sep="\n")  

列印效果如下

abc
5
{'Admin': 28}
['a', 23, ('b', 'cc')]

你可能疑問,同樣是字串為什麼s變數列印引號沒有了,而組合型別列表,字典中的字串的引號仍然存在?
這是因為 print 具備多型的能力,會自行推斷變數的型別,採用不同的型別方式,對輸出的原始型別字串是不帶引號。

解包

 s = [1,3,5]
 print(s)   #   [1,3,5]
 print(*s)  #  1 3 5

同前文一樣的道理,下述等價

 print('abc',123)     #輸出 abc 123
 print(*['abc',123])  #輸出 abc 123

問題

將下面字典資料進行指定的 print 輸出

 x={'Admin':95,'Lisa':85,'Bart':59}

要求輸出結果為

Adam:95 Lisa:85 Brat:59

解決

方案1
利用for迭代,print型別推斷,格式,結合字典型別的items方法返回 ItemsView[_KT, _VT]

 for k,v in  x.items():
     print(k,":",v,sep="",end=" ")

方案2
使用列表生成式,%字串格式化,外加解包知識,一行列印解決

 print(*['%s:%d'%t  for t in x.items()])

相關文章