请解释这个意外的\ b(退格)行为

时间:2016-10-25 23:37:34

标签: python python-2.7 escaping

预期:

>>> print "I print\b\b Backspace\b\b!"
I pri Backspa!
>>> print "I print\b\b Backspace\b\b\b!"
I pri Backsp!

观察到的:

>>> print "I print\b\b Backspace\b\b!"
I pri Backspa!e
>>> print "I print\b\b Backspace\b\b\b!"
I pri Backsp!ce

为什么'e'和'ce'没有被删除'!'插入

3 个答案:

答案 0 :(得分:4)

你没有删除它们;你只是退缩了。前进将覆盖以前的字符,但退格在备份时不会擦除。你想要

print "I print\b\b Backspace\b\b  !"

...看......

I pri Backspa  !

如果您想要"完整效果",您必须退格并在备份时覆盖空格...然后您可以继续前进。像

这样的东西
print "Backspace" + 2*"\b \b" + "!"

您可以根据需要多次使用乘数;它是一个小主题。上面一行显示

Backspa!

答案 1 :(得分:1)

\b字符将滑架向后移动一个空格,类似于\r将滑架一直移回到行首的方式。如果你没有覆盖你备份的角色,他们仍然会在那里。

>>> print "I print\b\b Backspace\b\b!"
I pri Backspa!e
>>> print "I print\b\b Backspace\b\b! "
I pri Backspa!

答案 2 :(得分:1)

\b也称为后退空间将光标向后移动1。

退格键不会删除任何内容,它会将光标向左移动,然后它会被你写的内容所掩盖。

让我们用你的例子来理解这一点:

"I print\b\b Backspace\b\b!"    # original string passed to "print"
#     ^^ * *        ^^ * *
#     12 1 2        34 3 4
  • 执行*1*2后,光标位于^1。因此,^1被空格' '取代,^2B取代(\b后面的字符

  • 执行*3*4后,光标位于^3,并被!取代。由于!之后没有任何内容,^4保持不变,否则其他字符将替换为下一个字符。

因此,在屏幕上打印的结果内容如下:

I pri Backspa!e