国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

閉包在python中的應用,translate和maketrans方法詳解

2019-11-14 17:38:11
字體:
來源:轉載
供稿:網友

  python對字符串的處理是比較高效的,方法很多。maketrans和translate兩個方法被應用的很多,但是具體怎么用常常想不起來。

  讓我們先回顧下這兩個方法吧:

  1.s.translate(table,str) 對字符串s移除str包含的字符,剩下的字符串按照table里的字符映射關系替換。table可以理解為轉換表,比較'a' -> 'A', 'b'->'B'.

  2.tabel = string.maketrans('s1', 's2') s1 和 s2 的長度必須一致,maketrans生成一個轉換表,若在s中有s1,則替換為s2,這個轉換表是字符字符一個個對應的,沒必要全部包含

  幾個例子

  

 1 import string 2  3 s = 'helloworld, 0001111' 4  5 table = string.maketrans('','')#沒有映射,保留原字符串 6 s.translate(table) #hello world, 0001111 7 s.translate(table, 'hello000)'#world, 1111 8  9 table = string.maketrans('abcdefgh','ABCDEFGH')10 s.translate(table)#HEllo,worlD,000111111 s.translate(table,'world')#HEllo,0001111

我們現在可以講makerans,translate包裝起來,形成一個返回閉包的工廠函數(PRint就是工廠函數)

 1 import string 2 def translator(frm = '',  to='', delete= '', keep = None): 3     if len(to) == 1: 4         to = to * len(frm) 5     trans = string.maketrans(frm, to) 6     if keep is not None: 7         allchars = string.maketrans('','') 8         delete = allchars.translate(allchars, keep.translate(allchars, delete)) 9         def translate(s):10             return s.translate(trans, delete)11         return translate

函數的最后用到了閉包,閉包是指有權訪問另一個函數作用域中的變量的函數。創建閉包的常見方式,就是在一個函數內部創建另一個函數:

1 def make_adder(addend):2     def adder(augend): return augend + addend3     return adder

執行 p = make_addr(23)將產生內層函數addr的一個閉包,這個閉包在內部引用了名字addend,而addend又綁定到數值23,執行p(100)則最終返回123。

現在我們已經把各種可能性封閉在一個建議以用的接口后面。

>>>digits_only = translator(keep = string.digits)

>>>digits_only('Chris Perkins :224 -7992')

'2247992'

移除屬于某字符集合的元素也非常簡單:

>>>no_digits = translator(delete = string.digits)

>>>no_digits('Chris Perkins:224-7992')

'Chris Perkings : - '

也可以替換:

>>>digits_to_hash = translator(from = string.digits, to = '#')

>>>digits_to_hash('Chris Perkins :224-7992')

'Chris Perkins: ###-####'

當delete和keep有重疊部分的時候,delete參數優先

>>>trans = translator(delete = 'abcd', kepp ='cdef')

>>>trans('abcdefg')

'ef'

其實可以更詳細的添加一些異常來處理同時出現delete,keep的情況。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 来宾市| 瑞昌市| 大连市| 浦东新区| 遂宁市| 利辛县| 临清市| 常熟市| 广丰县| 林口县| 瑞丽市| 阜宁县| 天长市| 苍梧县| 方城县| 莱西市| 且末县| 扎鲁特旗| 昌图县| 江源县| 康乐县| 株洲县| 泗洪县| 绵阳市| 进贤县| 玛纳斯县| 大田县| 辛集市| 金湖县| 镇康县| 承德市| 连南| 七台河市| 聊城市| 大同市| 永登县| 乾安县| 兴仁县| 铁岭市| 长春市| 博爱县|