Python中expandtabs()函数的作用是允许用户自定义(扩展)字符串中 '\t' 字符输出的空格数量。在Python中TAB制表键字符输出的空格数量默认为8。该函数在处理输出的空格数量时会把tab字符前边的字符数考虑进去。也就是说实际输出的空格数量是给定的tab的尺寸减去tab键前面的字符数量。
一、expandtabs()函数的语法格式
str.expandtabs(tabsize = 8)
str:待处理的字符串
参数:tabsize,指定tab的尺寸,默认为8个空白字符。
返回值:返回处理后的字符串。
二、expandtabs()函数使用示例
1、参数使用默认值
str1 = "R\tC#\tPHP\tPython"
print(str1)
res1 = str1.expandtabs()
print(res1)
输出结果:
R C# PHP Python
R C# PHP Python
因为Python中tab的默认值为8,所有两者输出是相同的。
2、正常使用参数
str1 = "A\tBC\tDEF\tGHI"
print(str1)
res1 = str1.expandtabs(10)
print(res1)
res2 = str1.expandtabs(6)
print(res2)
输出结果:
A BC DEF GHI
A BC DEF GHI
A BC DEF GHI
在上面的输出结果中第一行实际上默认使用的TAB的尺寸是8;
第二行,A和BC之间有9个空格,因为在第一个\t前有一个字母,所以10 -1 = 9,在BC和DEF之间有8个空格,因为在第2个\t前有两个字母,10 -2 = 8;同理,在DEF和GHI之间应有7个空格。
用同样的算法,可以推出第三行的A和BC之间应有6 -1 = 5个空格,BC和DEF之间应有 6 - 2 = 4个空格 ,DEF和GHI之间应有6 -3 = 3个空格。
另外,需要说明的是,\t前面的字符中有空格时,毫无疑问,空格也会作为字符计算在内,看下面的例子:
str1 = "Python is easy.\tPython!"
print(str1)
print(str1.expandtabs(16))
print(str1.expandtabs(18))
输出结果:
Python is easy. Python!
Python is easy. Python!
Python is easy. Python!
因为str1本身有15个字符(含空格),所以tabsize为16时,实际上\t被处理成1(16-15=1)个空格,当为18时,\t被处理成3个空格(18-15 = 3)。而第1行的输出中间也有一个空格,这是怎么回事呢?(请继续看下面的内容。)
3、\t前面的字符多于指定的tabsize情况
在这种情况下,可以认为Python中expandtabs()函数按如下规则进行处理:
tabsize * n - m > 0 (m为\t前面的字符数量)
也就是说,指定的tabsize数乘以一个大于0的数后减去\t前面的字符数量的结果值需大于0,即至少有一个空白符。见下面的例子:
str1 = "PythonPython\tR"
print(str1.expandtabs(6))
print(str1.expandtabs(7))
print(str1.expandtabs(8))
print(str1.expandtabs(9))
输出结果:
PythonPython R
PythonPython R
PythonPython R
PythonPython R
因为\t前面有12个字符,第1个 6 * 3 - 12 = 6 ,所以第1个输出了6个空格,第2个 7*2 - 12 =2 ,所以第2个有2个空格,按照这样的规则,第3个有 4 个空格,第4个有6个空格。
4、多个\t连续出现的情况
有时字符串中连着有多个\t情况,或者出现换行符\n的情况,这时,Python的expandtabs函数是如何处理的呢?
str1 = "C\tC#\t\tC++\t\nJava\tPython"
print(str1)
res1 = str1.expandtabs(12)
print(res1)
输出结果:
C C# C++
Java Python
C C# C++
Java Python
从上面输出结果中,通过数空格数,可以知道,在连续的\t中,紧挨字符的\t是输出减去前面字符数的空格数,而第2个\t会原样输出tab键规定数量的空格。注意:\t前面的\r,\n不会被当作一个字符来处理。
5、参数小于等于0或无效
如果tabsize参数指定为0或负数,甚至是小数会出现什么情况呢?看下面的例子:
>>>
str1 = "翔宇亭IT乐园\twww.biye5u.com"
>>>
print(str1.expandtabs()) # 中间会有1个空格
翔宇亭IT乐园 www.biye5u.com
>>>
print(str1.expandtabs(0)) # 输出中间会没有空格
翔宇亭IT乐园www.biye5u.com
>>>
print(str1.expandtabs(-4))
翔宇亭IT乐园www.biye5u.com
>>>
print(str1.expandtabs(-8))
翔宇亭IT乐园www.biye5u.com
>>>
print(str1.expandtabs(2.3)) # 将导致TypeError错误:参数类型错误
Traceback (most recent call last):
File "", line 1, in
print(str1.expandtabs(2.3))
TypeError: integer argument expected, got float
>>>
从以上输出情况可以看出,expandtabs()函数把负数一律按0来处理,即不输出空格,而给一个非整数参数时,将导致语法错误。
本文(完)
尊重劳动人民成果,转载请注明出处并给出链接地址:翔宇亭IT乐园(http://www.biye5u.com)-文章链接地址:http://www.biye5u.com/article/python/2020/6464.html
如内容有不妥之处,请留言评论。