Python maketrans()是一个静态函数(使用str类型直接调用,而非字符串),其作用是为str.translate()函数提供转换字符映射表。
官方文档给出的语法格式如下:
static str.maketrans(x[, y[, z]])
该函数有三个参数,其中后两个是可选参数。
(1)该函数只有一个参数 x 时, x 必须是字典类型,以给出转换的映射关系。字典的键取值可以是:对应某个Unicode字符的整型序数,或者字符(长度为1的字符串);键对应的值取值可以为Unicode字符序数(整型),任意长度的字符串或None。
(2)该函数取两个参数时, x 和 y 必须是等长的字符串。在生成的结果字典中, x 中的每一个字符将于 y 中相同位置的字符进行匹配;
(3)该函数取第三个参数时,该参数 z 必须是一个字符串,字符串中的每个字符将使用 None 进行匹配,即在使用 str.translate()函数 对 str 进行转换时, str 中包含在 z 中的字符将被删除掉。
该函数的返回值是字典类型。是由 x 中的字符对应的Unicode序数作为键, y 中对应的字符序数作为元素值构成的字典,当指定 z 参数时, z 参数中的每个字符Unicode序数也会作为字典中的键,而对应的值为 None .
当给定一个参数x时,x必须是字典类型。
>>> d1 = str.maketrans({98:104})
>>> d1
{98: 104}
>>> type(d1)
<class 'dict'>
>>> d2 = str.maketrans({'a':'b'})
>>> d2
{97: 'b'}
>>> d3 = str.maketrans({'a':'abcd'})
>>> d3
{97: 'abcd'}
>>> d4 = str.maketrans({'a':None,'b':'c',100:110,112:'abc'})
>>> d4
{97: None, 98: 'c', 100: 110, 112: 'abc'}
>>> d5 = str.maketrans('a')
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
d5 = str.maketrans('a')
TypeError: if you give only one argument to maketrans it must be a dict
>>> d5 = str.maketrans(103)
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
d5 = str.maketrans(103)
TypeError: if you give only one argument to maketrans it must be a dict
>>> d5 = str.maketrans(None)
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
d5 = str.maketrans(None)
TypeError: if you give only one argument to maketrans it must be a dict
>>>
从上面的例子可以看出,当所给的参数不是字典类型时,将引发“TypeError”错误。
当给定两个参数x和y时,x和y必须是等长的字符串。
>>> x = '1234'
>>> y = 'abcd'
>>> print(str.maketrans(x,y))
{49: 97, 50: 98, 51: 99, 52: 100}
>>> print(str.maketrans('xyz','ab'))
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
print(str.maketrans('xyz','ab'))
ValueError: the first two maketrans arguments must have equal length
>>> print(str.maketrans('ab','xyz'))
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
print(str.maketrans('ab','xyz'))
ValueError: the first two maketrans arguments must have equal length
>>> print(str.maketrans('abc','xy '))
{97: 120, 98: 121, 99: 32}
>>>
注意:最后一个例子中 y 参数的字符串中最后一个字符为空格。同时,我们注意到如果两个字符串不等长时,将引发“ValueError”错误。
给定三个参数时,z参数是一个字符串,用于指定要删除的字符。
>>> x = 'abcd'
>>> y = 'wxyz'
>>> z = 'hij'
>>> print(str.maketrans(x, y, z))
{97: 119, 98: 120, 99: 121, 100: 122, 104: None, 105: None, 106: None}
>>>
从上面的例子可以看出,'h', 'i', 'j' 三个字符被转换成了None,即在使用str.translate()函数时,这些字符将被删除掉。
前面说过,maketrans()函数主要是为translate()函数生成转换的字符映射表,下面的例子将演示两者如何配合使用的。
>>> x = 'aeiou'
>>> y = 'vwxyz'
>>> z = 'rst'
>>> dic = str.maketrans(x, y, z)
>>> str1 = 'I love my country as much as i love my life.'
>>> res = str1.translate(dic)
>>> print(res)
I lyvw my cyzny v mzch v x lyvw my lxfw.
>>>
上面演示了maketrans()函数和translate()函数的配合使用方法。从结果中可以看出,translate()函数执行完毕后,str1中的字符'a', 'e', 'i', 'o', 'u' 五个字母(由参数x给定的字符串中的字符)分别被 'v', 'w', 'x', 'y' 和 'z' (由参数y给定的字符串中的字符)给替换掉了,同时在str1中删除掉了参数z中指定的字符。
从这个例子中,我们也注意到,maketrans()函数和translate()函数的参数值是大小写敏感的,原因在于其按照Unicode字符序数来处理字符。
以上讲解了Python中静态函数maketrans()的参数及使用方法,并给出了其与translate()函数配合使用的例子。
实际上,maketrans()函数就是生成由键值对构成的字符映射表,其结果作为translate()函数的参数,用于对字符串中的字符进行替换,maketrans()函数中x参数用于给出需要替换的字符构成的字符串,y参数用于给出替换后的字符构成的字符串,z参数给出需要在字符串删除掉的字符构成的字符串。
新闻热点
疑难解答