namedtuple
建立一個自訂的tuple, 用起來就像是使用class 一樣方便. 但其屬性是不可變更的
from collections import namedtuple
Point=namedtuple('Point',['x', 'y'])
p=Point(1,2)
#p.x=100 不可變更
print(p.y)
deque
list用在存儲資料, 是以線性的方式寫成的, 所以在新增刪除元件時是非常緩慢的, 尤其是在資料量很大的時候. 所以deque就是為了改善這缺點而產生的.
from collections import deque q=deque(["first", "second","third"]) q.append("forth") q.appendleft("zero") q.pop() print(q)
defaultdic
dict若存取不存在的key值就會發生例外而中斷程式碼, 所以都要用try-except包含起來. 為了省下這麻煩, 就可以改用defaultdic
from collections import defaultdict dic=defaultdict(lambda: 'Null') dic["id"]=1 dic["name"]="thomas" print("Name : %s, Address : %s" %(dic["name"], dic["address"]))
Counter
簡單計數器, 如下
from collections import Counter
c=Counter()
for ch in "python program designed":
c[ch]+=1
print(c)
hashlib
雜湊碼演算法, 利用函數將不同長度的明碼轉換成固定長度的暗碼(digest). 而暗碼要再度轉回明碼, 是蠻困難的事情(不過聽說大陸一位女數學家已輕易的轉回去了). 這裏面包含了如md5, sha1..等.
md5 : 產生32個字元的字串(每個字元4byte), 共128byte
sha1 : 40個字元, 160byte
sha3_256 : 64個字元
sha3_512 : 128個字元
import hashlib md5=hashlib.md5() md5.update("mypassword".encode('utf-8')) r=md5.hexdigest() print("md5 : %s, length:%d" %(r, len(r))) sha1=hashlib.sha1() sha1.update("mypassword".encode('utf-8')) r=sha1.hexdigest() print("sha1 : %s, length:%d," %(r, len(r))) sha2=hashlib.sha3_256() sha2.update("mypassword".encode('utf-8')) r=sha2.hexdigest() print("sha3_256 : %s, length:%d," %(r, len(r))) sha3=hashlib.sha3_512() sha3.update("mypassword".encode('utf-8')) r=sha3.hexdigest() print("sha3_512 : %s, length:%d," %(r, len(r))) 結果 : md5 : 34819d7beeabb9260a5c854bc85b3e44, length:32 sha1 : 91dfd9ddb4198affc5c194cd8ce6d338fde470e2, length:40, sha3_256 : 42a00eaa9468b08adc80d9dfb877a6d30c3ed64eea293e945228669ee3de4f1e, length:64, sha3_512 : 6d8ce887d0e6bb2e975ef6a5bbf8e6474dcf4c02cbd7cb8a14523675e3bb995bca0bfb6b29fa48a9ffb2cc62738a1639502a04395e3868f634c23fb885e2b3b0, length:128,