为什么`print' 1 \ x08'`结果1同时`print' 1 \ x082'`结果2?

时间:2015-12-11 07:04:28

标签: python python-2.7 ascii chr

今天,我正在学习内置函数chr。通过ascii-table搜索,我发现\x08表示退格。所以我玩了一下。但结果让我困惑:

In [52]: print '1\x08'
1

In [53]: print '1\x082'
2

似乎只有另一个字符后跟\x08才会像退格一样,为什么会这样? \x08在字符串中的表现如何?

3 个答案:

答案 0 :(得分:1)

在两种情况下它都像退格一样,也就是说它将光标向后移动一个空格。但是,除非你写别的东西,否则它不会删除那里的东西。所以在第一种情况下,1仍然存在,但在第二种情况下,它被2覆盖。

答案 1 :(得分:1)

Backspace只将光标移动一个字符,实际上并不删除它。例如,结果为193:

print('123\x08\x089')

您可以使用空格来实际“删除”角色......

答案 2 :(得分:1)

1 ---- backspace只需将光标移动到左侧的一个空格即可 如果你使用工作或其他编辑器,它也将删除左边的一个字符。 您必须知道的是backspace也是与1a相同的字符。

2 ----终端作为我们的默认输出设备,你也可以将他作为文件。

所以如果你使用

  print '1\x08'

这意味着您在文件标准输出中写了1backspace

如果您阅读该文件,系统会显示1 + breakspace,您将获得1

如果您使用

  print '1\x082'

这意味着您在文件标准输出中写了1backspace2

如果您阅读该文件,系统会获得1 + breakspace + 2,当您打印它们时,您只会获得2,因为它会在您使用退格时覆盖第一个1。 / p>

有关详细信息,您可以看到下一个测试代码

  if __name__ == "__main__":
      print "1\x08"
      print "1\x082"

      f = open("1.txt", "w")
      f.write("1\x08\x082")
      f.close();

      f = open("1.txt", "r")
      str = f.readlines( )
      print len(str), str
      for s in str:
      print "s=|" + s + "|"

enter image description here

您可以看到字符串s=|1\x08\x082|显示s=2|。因为|1backspace两次时不会显示。