首页 > 开发 > Python > 正文

Python expandtabs()函数的使用

2023-04-26 12:04:41
字体:
来源:转载
供稿:网友

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 = "武林网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来处理,即不输出空格,而给一个非整数参数时,将导致语法错误。

Python expandtabs函数

本文(完)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表