我正在学习 Python 并使用 Python 中的 expandtabs 命令。
这是文档中的官方定义:



所以我从中了解到的是选项卡的默认大小是 8 并且要增加它,我们可以使用其他值

所以,当我在 shell 中尝试时,我尝试了以下输入 -

>>> str = "this is\tstring"
>>> print str.expandtabs(0)
this isstring
>>> print str.expandtabs(1)
this is string
>>> print str.expandtabs(2)
this is string
>>> print str.expandtabs(3)
this is  string
>>> print str.expandtabs(4)
this is string
>>> print str.expandtabs(5)
this is   string
>>> print str.expandtabs(6)
this is     string
>>> print str.expandtabs(7)
this is       string
>>> print str.expandtabs(8)
this is string
>>> print str.expandtabs(9)
this is  string
>>> print str.expandtabs(10)
this is   string
>>> print str.expandtabs(11)
this is    string

所以在这里,
  • 0 完全删除制表符,
  • 1 与默认的 8 ,
  • 完全一样
  • 21
  • 完全一样
  • 3 不同
  • 4 就像使用 1

  • 之后它一直增加到 8 这是默认值,然后在 8 之后增加。但是为什么数字从 0 到 8 的奇怪模式?我知道它应该从 8 开始,但原因是什么?

    最佳答案

    str.expandtabs(n) 不等同于 str.replace("\t", " " * n)
    str.expandtabs(n) 跟踪每一行的当前光标位置,并用从当前光标位置到下一个制表位的空格数替换它找到的每个制表符。制表位被视为每个 n 字符。

    这是选项卡工作方式的基础,并不特定于 Python。有关制表位的详细说明,请参见this answer to a related question
    string.expandtabs(n) 相当于:

    def expandtabs(string, n):
        result = ""
        pos = 0
        for char in string:
            if char == "\t":
                # instead of the tab character, append the
                # number of spaces to the next tab stop
                char = " " * (n - pos % n)
                pos = 0
            elif char == "\n":
                pos = 0
            else:
                pos += 1
            result += char
        return result
    

    以及一个使用示例:
    >>> input = "123\t12345\t1234\t1\n12\t1234\t123\t1"
    >>> print(expandtabs(input, 10))
    123       12345     1234      1
    12        1234      123       1
    

    请注意每个制表符 ( "\t" ) 是如何被空格数替换的,使其与下一个制表位对齐。在这种情况下,每 10 个字符有一个制表位,因为我提供了 n=10

    关于Python expandtabs 字符串操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34546171/

    10-12 00:14