国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

Python2.x和3.x下maketrans與translate函數使用上的不同

來源:懂視網 責編:小采 時間:2020-11-27 14:39:47
文檔

Python2.x和3.x下maketrans與translate函數使用上的不同

Python2.x和3.x下maketrans與translate函數使用上的不同:maketrans和translate函數是進行字符串字符編碼的常用方法。本文著重點在于演示其基本用法和在不同版本下操作的差異。本文提到的2.X版本指2.6以上的版本,3.X版本指3.1以上的版本。 2.X版本把字符串基本分為兩種:unicode字符串和8位字符串str,后者包
推薦度:
導讀Python2.x和3.x下maketrans與translate函數使用上的不同:maketrans和translate函數是進行字符串字符編碼的常用方法。本文著重點在于演示其基本用法和在不同版本下操作的差異。本文提到的2.X版本指2.6以上的版本,3.X版本指3.1以上的版本。 2.X版本把字符串基本分為兩種:unicode字符串和8位字符串str,后者包

maketrans和translate函數是進行字符串字符編碼的常用方法。本文著重點在于演示其基本用法和在不同版本下操作的差異。本文提到的2.X版本指2.6以上的版本,3.X版本指3.1以上的版本。
2.X版本把字符串基本分為兩種:unicode字符串和8位字符串str,后者包含字節數據和我們常見的ASCII碼數據;而3.X版本則重新對字符串進行了劃分,分為了字節字符串bytes和文本字符串str,兩者都是不可變的,所以添加了一個可變的字節字符串類型bytearray。
2.X版本中string類型和str、unicode類型大量方法是重復的,所以3.X版本不提倡使用string模塊中與str重復的方法。string模塊中還有很多有用的常量和方法,比如string.digits,可以在字符串編碼中方便地使用。

2.X中maketrans和translate函數的簽名:

 string.maketrans(from, to)

 string.translate(s, table[, deletechars])
 str.translate(table[, deletechars])
 unicode.translate(table)

3.X中maketrans和translate函數的簽名:

 static str.maketrans(x[, y[, z]])
 static bytes.maketrans(from, to)
 static bytearray.maketrans(from, to)

 str.translate(map)
 bytes.translate(table[, delete])
 bytearray.translate(table[, delete])

從中可以看出,相對于2.X的string模塊的maketrans方法,3.X中分別提供了三個靜態方法用于創建映射表。
下面讓我們看一個簡單的例子來說明字符串轉換的過程:
2.X下的演示過程:

 >>> import string #導入string模塊
 >>> map = string.maketrans('123', 'abc') #建立映射表,將字符串中含有的'1','2','3'替換為'a','b','c'
 >>> s = '54321123789' #轉換前的字符串
 >>> s.translate(map) #用創建的映射表map轉換字符串
 '54cbaabc789' #轉換后的字符串

3.X下的演示過程:

 >>> map = str.maketrans('123','abc')
 >>> s = '54321123789'
 >>> s.translate(map)
 '54cbaabc789'

2.X使用了string的maketrans函數,而3.X使用了str的maketrans函數,除了這一點,使用方法是基本相同的。若指定字符串中要刪除的字符時,使用就會略有不同,如下:
2.X下的演示過程:

 >>> import string
 >>> map = string.maketrans('123', 'abc')
 >>> s = '54321123789'
 >>> s.translate(map, '78') #除了轉換,還要刪除字符串中的字符'7','8'
 '54cbaabc9' #轉換后的字符串沒有字符'7','8'

3.X下的演示過程:

 >>> map = str.maketrans('123','abc', '78')#要刪除的字符需要在這指定
 >>> s = '54321123789'
 >>> s.translate(map)
 '54cbaabc9'

我在讀《Python Cookbook》遇到了一個基于2.X版本的例子,如下

 import string
 def translator(frm='', to='', delete='', keep=None):
 if len(to) == 1:
 to = to * len(frm)
 trans = string.maketrans(frm, to)
 if keep is not None:
 allchars = string.maketrans('', '')
 delete = allchars.translate(allchars, keep.translate(allchars,delete))
 def translate(s):
 return s.translate(trans, delete)
 return translate

allchars應該是一個返回的映射表,為什么還可以調用translate方法,所以它應該是一個str類型,測試如下:

 >>> import string
 >>> map = string.maketrans('123', 'abc')
 >>> type(map)
 

在3.X版本中這個方法不能正常通過運行,那么錯在什么地方呢,我們看看映射表是什么類型:

 >>> map = str.maketrans('123','abc')
 >>> type(map)
 

知道了映射表的類型了,我們就可以對其進行“后期加工”,像上面《Python Cookbook》中的例子一樣,來滿足我們的編碼要求。

上面討論的例子用的字符串是ASCII字符組成的,如果是字節類型,2.X版本中操作是一樣的,3.X中調用bytes或bytearray的函數;若是unicode類型的,2.X需要用unicode的translate方法,注意下面的代碼

 >>> print u"hallo".translate({97:u'e'})
 hello
 >>> print u"hallo".translate({'a':u'e'})
 hallo
 >>> print u"hallo".translate({u'a':u'e'})
 hallo

結果之所以不一樣,查閱手冊可知unicode的translate方法的映射表也就是字典的鍵必須是unicode的位序數,值可以是unicode的位序數、unicode字符串或這None。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Python2.x和3.x下maketrans與translate函數使用上的不同

Python2.x和3.x下maketrans與translate函數使用上的不同:maketrans和translate函數是進行字符串字符編碼的常用方法。本文著重點在于演示其基本用法和在不同版本下操作的差異。本文提到的2.X版本指2.6以上的版本,3.X版本指3.1以上的版本。 2.X版本把字符串基本分為兩種:unicode字符串和8位字符串str,后者包
推薦度:
標簽: python translate 2.x
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 欧美高清亚洲欧美一区h | 国产免费高清视频在线观看不卡 | 亚洲欧洲日本在线观看 | 欧美亚洲另类视频 | 成人国产一区二区三区精品 | 全黄毛片 | 精品一区二区三区五区六区七区 | 国产精品久久久久久永久牛牛 | 91久久精品国产性色也91久久 | 99久久99久久久精品久久 | 婷婷在线视频观看 | 亚洲欧美日韩中文字幕在线 | 欧美日韩亚洲区久久综合 | 国产在线视频专区 | 日韩免费一区二区三区 | 91精品成人免费国产 | 欧美日韩视频 | 精品一成人岛国片在线观看 | 国产欧美一区二区 | 囗交免费毛片 | 亚洲精彩视频 | 免费看成人国产一区二区三区 | 欧美激情视频一区二区三区 | 日韩在线视频一区 | 五月天婷婷久久 | 亚洲精品第一页 | 精品欧美一区二区三区在线 | 国内偷自第一二三区 | 日韩第一页在线观看 | 欧美激情一区二区 | 国产成人欧美一区二区三区的 | 日韩一本 | 国内精品伊人久久久久 | 一级毛片真人不卡免费播 | 成人国产一区二区三区精品 | 精品国产乱码久久久久久一区二区 | 亚洲国产成人久久综合碰 | 日韩欧美第一页 | 国产欧美日本在线 | 欧美日韩亚洲色图 | 久久成人国产精品免费 |