Python中expandtabs()函数的作用是允许用户自定义(扩展)字符串中 '/t' 字符输出的空格数量。在Python中TAB制表键字符输出的空格数量默认为8。该函数在处理输出的空格数量时会把tab字符前边的字符数考虑进去。也就是说实际输出的空格数量是给定的tab的尺寸减去tab键前面的字符数量。
str.expandtabs(tabsize = 8)
str:待处理的字符串
参数:tabsize,指定tab的尺寸,默认为8个空白字符。
返回值:返回处理后的字符串。
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 = "武林网VEVB/twww.VeVb.com"
>>> print(str1.expandtabs()) # 中间会有1个空格
武林网VEVB www.VeVb.com
>>> print(str1.expandtabs(0)) # 输出中间会没有空格
武林网VEVBwww.VeVb.com
>>> print(str1.expandtabs(-4))
武林网VEVBwww.VeVb.com
>>> print(str1.expandtabs(-8))
武林网VEVBwww.VeVb.com
>>> print(str1.expandtabs(2.3)) # 将导致TypeError错误:参数类型错误
Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
print(str1.expandtabs(2.3))
TypeError: integer argument expected, got float
>>>
从以上输出情况可以看出,expandtabs()函数把负数一律按0来处理,即不输出空格,而给一个非整数参数时,将导致语法错误。
本文(完)
新闻热点
疑难解答