python print函数新奇用法
1. 打印机效果
效果是在终端的同一行上周期性输出字符,涉及print函数的两个重要参数:end、flush。
end指示本次print后的结尾字符,默认是换行符;flush默认是False,此时print一般在确定好一行的输出内容后才去打印一整行内容。flush设置为True后,即使不换行也要立刻打印当前内容。
import time
def printer(text, delay=0.2):
cnt = 1
for ch in text:
print(ch, end='', flush=True)
#print(ch, end='', flush=False) # 尝试注释上一行,取消本行注释,查看输出
if cnt%10==0: # 周期性换行
print()
cnt += 1
time.sleep(delay)
printer(u"话说天下大势,分久必合,合久必分。周末七国分争,并入于秦。及秦灭之后,楚、汉分争,又并入于汉。汉朝自高祖斩白蛇而起义,一统天下,后来光武中兴,传至献帝,遂分为三国。")
2. 不换行动画效果
周期性输出指定的内容不换行,通过覆盖原有内容,实现动画效果;输出一次就需要光标回退一次。
import sys
import time
write = sys.stdout.write
def waiting(cycle=5, delay=0.1):
for i in range(cycle):
for ch in ['-','\\','|','/']:
info = f'[{ch}] Waiting for processing...'
print(info, end='',flush=True) # 覆盖原有内容
write('\x08' * len(info)) # '\b' 光标退格
time.sleep(delay)
waiting()
3. 清空本行内容
输出内容不换行,清空本行内容,重新输出一些内容。'\r'字符表示光标移动到行首。
import time
time.sleep(1)
print('12345', end = '', flush=True)
time.sleep(2)
print('\r \r', end = '', flush=True)
time.sleep(3)
print('67890', end = '', flush=True)
仔细想想为什么是这样的效果。