多个“ \ b”在Jupyter中无法正常工作

时间:2019-03-31 10:50:38

标签: python string jupyter-notebook

我正在Jupyter笔记本中运行Python 3。输入:

print('hello \b\b\b\b\b\b goodbye')

不会像您期望的那样仅返回goodbye。相反,它返回hell goodbye,因此6个退格键仅擦除2个字符。

相同的代码在Python控制台和终端的IPython笔记本中可以正常工作,为什么在Jupyter中不起作用?

1 个答案:

答案 0 :(得分:1)

首先,如this thread所述,退格键并不是要擦除左边的字符。它仅应充当“左箭头”。编辑:正如下面OP的评论中所述,在Jupyter笔记本中这似乎不成立-\b在Jupyter笔记本中确实具有擦除的作用。

其次,如 Jupyter笔记本所示,退格键的行为似乎存在异常。 (当我在Windows的 conda提示符上运行python来运行相同的测试时,我找不到异常,并且行为完全符合预期)。异常之处在于,奇数个连续的退格键似乎表现得像一个单一的退格键,而偶数个的退格键似乎总是像两个连续的退格键一样。就像我说的那样,在conda提示符下的原始Python上,三个连续的退格键的效果不同于单个退格键的效果,这就是应该的样子。

这是我运行的测试,首先是在Jupyter笔记本单元中的代码段,其次是在conda提示符下的Python脚本:

print('00hello goodbye')
print('01hello\b goodbye')
print('02hello\b\b goodbye')
print('03hello\b\b\b goodbye')
print('04hello\b\b\b\b goodbye')
print('05hello\b\b\b\b\b goodbye')
print('06hello\b\b\b\b\b\b goodbye')
print('07hello\b\b\b\b\b\b\b goodbye')
print('08hello\b\b\b\b\b\b\b\b goodbye')

Jupyter笔记本中的输出:

00hello goodbye
01hell goodbye
02hel goodbye
03hell goodbye
04hel goodbye
05hell goodbye
06hel goodbye
07hell goodbye
08hel goodbye

在命令提示符下输出:

00hello goodbye
01hell goodbye
02hel goodbye
03he goodbye
04h goodbye
05 goodbye
0 goodbye
 goodbye
 goodbye

编辑:总结上述问题,在Jupyter笔记本vs命令提示符下,行为是非常不同的。区别在于两个方面(a)退格充当擦除功能(b)多个连续(奇数或偶数个)退格折叠为1或2个退格。这两个异常似乎都不在命令提示符下。