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.companysz.com"
>>> print(str1.expandtabs()) # 中間會有1個空格
武林網VEVB www.companysz.com
>>> print(str1.expandtabs(0)) # 輸出中間會沒有空格
武林網VEVBwww.companysz.com
>>> print(str1.expandtabs(-4))
武林網VEVBwww.companysz.com
>>> print(str1.expandtabs(-8))
武林網VEVBwww.companysz.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來處理,即不輸出空格,而給一個非整數參數時,將導致語法錯誤。
本文(完)
新聞熱點
疑難解答