"""1. makestrans()用法文法: str.maketrans(intab, outtab]);Python maketrans() 方法用於建立字元對應表的轉換表,對於接受兩個參數的最簡單的調用方式,第一個參數是字串,表示需要轉換的字元,第二個參數也是字串表示轉換的目標。註:兩個字串的長度必須相同,為一一對應的關係。Python3.4已經沒有string.maketrans()了,取而代之的是內建函數:bytearray.maketrans()、bytes.maketrans()、str.maketrans()"""intab = "abcd"outtab = "1234"str_trantab = str.maketrans(intab,outtab)test_str = "csdn blog: http://blog.csdn.net/wirelessqa"print (test_str.translate(str_trantab)) # 3s4n 2log: http://2log.3s4n.net/wirelessq1"""2. translate() 用法根據參數table給出的表(包含 256 個字元)轉換字串的字元, 要過濾掉的字元放到 del 參數中。文法:str.translate(table[, deletechars]);bytes.translate(table[, delete]) bytearray.translate(table[, delete])若給出了delete參數,則將原來的bytes中的屬於delete的字元刪除,剩下的字元要按照table中給出的映射來進行映射 """# 若table參數為None,則只刪除不映射print(b'http://www.csdn.net/wirelessqa'.translate(None, b'ts')) #b'hp://www.cdn.ne/wireleqa'# 若table參數不為NONE,則先刪除再映射bytes_tabtrans = bytes.maketrans(b'abcdefghijklmnopqrstuvwxyz', b'ABCDEFGHIJKLMNOPQRSTUVWXYZ') print(b'http://www.csdn.net/wirelessqa'.translate(bytes_tabtrans, b'ts')) #b'HP://WWW.CDN.NE/WIRELEQA'"""3. 閉包: 它是個內層函數,由一個變數來指代,而這個變數對於外層包含它的函數來說是本地變數"""def make_adder(addend): def adder(augend): #adder為內層函數 return augend + addend return adder a = make_adder(1) #產生一個閉包,addend為1,注意return的是adderb = make_adder(2) #產生另一個閉包,addend為2,注意return的是adderprint (a(100), b(100)) #a(100)就相當於adder(100),adden之前為1,因此返回100+1"""4. 對translate方法的簡單封裝,使用起來更加方便frm : intabto : outtabdelete : 指定刪除字元keep: 指定保留字元delete和keep有重疊時,delete優先 """def my_translator(frm = b'', to = b'', delete = b'', keep = None): if len(to) == 1: to = to * len(frm) #如果to只有一個字元,將字元的數量跟frm相等,這樣才能一一對應 #構建一個映射表 trans = bytes.maketrans(frm, to) if keep is not None: #如果有保留字 allchars = bytes.maketrans(b'', b'') # 擷取空映射表的所有字元 keep = keep.translate(allchars, delete) # 從keep中去除delete中包含的字元,即keep與delete有重合時,優先考慮delete delete = allchars.translate(allchars, keep) # delete為從全體字元中除去keep,即不在keep的都刪掉 # 閉包 def my_translate(s): return s.translate(trans, delete) return my_translate # 測試my_tranlator # 只保留數字 digits_only = my_translator(keep = b'0123456789') print(digits_only(b'http://www.csdn.net/wirelessqa 520520')) #b'520520' # 刪除所有數字 no_digits = my_translator(delete = b'0123456789') print(no_digits(b'http://www.csdn.net/wirelessqa 520520')) #b'http://www.csdn.net/wirelessqa ' # 用*替換數字 digits_to_hash = my_translator(frm = b'0123456789', to = b'*') print(digits_to_hash(b'http://www.csdn.net/wirelessqa 520520')) #b'http://www.csdn.net/wirelessqa ******' # delete與keep有重合時的情況 trans = my_translator(delete = b'20', keep = b'0123456789') print(trans(b'http://www.csdn.net/wirelessqa 520520')) # b'55'
公眾帳號: wirelessqa
關於作者:
作者: 畢小朋 | 老 畢 郵箱: wirelessqa.me@gmail.com
微博: @WirelessQA 部落格: http://blog.csdn.net/wirelessqa