结论(在python中)
- \r 代表移动输入光标到【行首】继续输入
- \n 代表移动输入光标到【下行首】继续输入
- \r\n 代表移动输入光标到【下行首】继续输入(有\n换行到行首了,不管上一行在哪里都被\n覆盖了)
- 有的系统编辑器认\n,有的只认\r\n。综上,为了通用代码中一般用\r\n(一般哈,具体问题具体分析)
历史原因
-
问题:
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意儿,每秒钟可以打10个字符。
它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。
要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。 -
解决:
于是想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。
一个叫做"回车",告诉打字机把打印头定位在左边界。
另一个叫做"换行",告诉打字机把纸向下移一行。 -
计算机出现:
这两个概念也就被搬到了计算机上。
起初,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。
于是,就出现了分歧:有的编辑器只认\r\n,有的编辑器则两个都认。
所以,不同系统上的或者不同编辑器保存的文本在非源编辑器打开末尾出现奇怪的符号可以考虑是这个问题了。
python实例
- 情景:要在命令行输出一个进度条
使用\r
import time
def demoPgr():
for i in range(101):
bar = '[' + '=' * (i // 2) + ' ' * (50 - i // 2) + ']'
print(f"\r{bar} {i:3}%", end='', flush=True) # \r在这里的作用是移动到行首以覆盖方式输出
time.sleep(0.05)
demoPgr()
print()
使用\n 或者 \r\n
import time
def demoPgr():
for i in range(101):
bar = '[' + '=' * (i // 2) + ' ' * (50 - i // 2) + ']'
print(f"\n{bar} {i:3}%", end='', flush=True) # \n换行输出
# print(f"\r\n{bar} {i:3}%", end='', flush=True) # \r回到行首,\n换行输出
time.sleep(0.05)
demoPgr()
print()