我现在正在学习Python课程,而我刚刚学习了退格字符。像换行符(\ n)一样,退格键是一个带有ASCII码8的特殊字符。我的老师无法想出使用它的理由,但我很好奇它是如何使用的。也许只是历史原因?当我尝试print("Hellow\b World")
时,我得到了我的预期:Hello World
。
退格字符的原因是什么,以及如何使用它?
编辑:我知道它并不是特定于python的,但在编写原始问题时,我主要考虑的是Python并忘记了这个事实。我尝试编辑以使其更清晰。
答案 0 :(得分:3)
退格键是控制字符,可将光标在控制台中向后移动一个字符,但不会将其删除。
退格字符的原因是什么,怎么使用?
它在ASCII世界中曾经被用来打印accented字符。
例如à可以使用三个字符序列BS`(或使用字符的十六进制值0x61 0x08 0x60)产生。
有关退格here
的更多信息退格键vs退格字符
很多人将两者混为一谈。键盘上的Backspace键几乎具有删除前一个字符的通用功能(=向后移动光标并删除该字符)。但是,退格字符'\ b'仅将光标在控制台窗口中移回一个位置,而不会删除它。
答案 1 :(得分:2)
这不是Python的功能,而是由ASCII定义的符号。 Python只支持它(就像所有其他语言一样)。
更具体地说,它是control character,用于擦除打印的最后一个字符或叠印它。第一版ASCII发布于1963年,当时输出符号的常用方法是将它们发送到打印机并在纸上物理打印字母。以下是维基百科的摘录:
打印控制字符首先用于控制打印机的物理机制,这是最早的输出设备。 [...]退格符(BS)将打印位置向后移动一个字符空间。在打印机上,这种情况最常用,因此打印机可以叠印字符以制作其他字符,而不是通常可用的字符。在终端和其他电子输出设备上,通常有软件(或硬件)配置选择,它们将允许擦除的破坏退格(即,BS,SP,BS序列),或者不允许破坏的退格。 p>
答案 2 :(得分:2)
也许首先了解那里发生的事情会有所帮助:
print()
正在写入标准输出,并且正在写入其中的所有内容,包括w
和退格键。
现在必须显示某些内容。最有可能是终端仿真器。
理论上会发生的是显示w
,然后将其删除,但是并未刷新它,并且要使其实际发生速度更快。
因此,现实生活中的应用程序几乎总是在打印文本的开头使用\ b。
我写了一个简短的示例,其中的进度指示器上有一个微调框。示例打印"-"
,后跟"\b\\"
(删除-
,并用\
替换),然后打印"\b|"
(删除\
,并替换|
)等等。
这样,-
\
|
/
-
\
|
/
看起来就像是旋转的动画线。
#!/usr/bin/env python3
import time
spinner="\\|/-"
print ("----------\r", end='', flush=True)
for pos in range(10):
print ("-", end='', flush=True)
for spin in range(25):
#here should be a break as soon as some task proceeded further
time.sleep(0.1)
print ("\b" + spinner[spin % 4], end='', flush=True)
print ("\b*", end='', flush=True)
print ()
P.S .:许多现有程序都使用\b
\r
\033
之类的控制字符来显示状态行。最受欢迎的可能是wget。我也至少通过一个python脚本看到了这样的输出(尽管我再也记不清哪个了)
答案 3 :(得分:1)
它如何工作的一个小例子:
>>> name = "Robert" + "\b\b\b\b" + 'p' + "\b\b" + 'u'
>>> print(text)
Rupert
>>> print(list(text))
['R', 'o', 'b', 'e', 'r', 't', '\x08', '\x08', '\x08', '\x08', 'p', '\x08', '\x08', 'u']
>>> text += "\bob"
>>> print(text)
Robert
>>> print(list(text))
['R', 'o', 'b', 'e', 'r', 't', '\x08', '\x08', '\x08', '\x08', 'p', '\x08', '\x08', 'u', '\x08', 'o', 'b']