国产探花免费观看_亚洲丰满少妇自慰呻吟_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的情況。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 郁南县| 洪洞县| 临夏市| 昌图县| 安多县| 余江县| 景洪市| 灌南县| 盐边县| 南京市| 漳平市| 漳平市| 张家口市| 乌海市| 离岛区| 金川县| 弋阳县| 涿鹿县| 沾益县| 宁德市| 易门县| 紫云| 灵璧县| 农安县| 蕲春县| 临高县| 陵水| 咸宁市| 宜黄县| 惠东县| 泾川县| 拉孜县| 浪卡子县| 云霄县| 洞头县| 清原| 安丘市| 内乡县| 鄂托克前旗| 五大连池市| 罗甸县|