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)

仔细想想为什么是这样的效果。

posted @ 2022-07-27 21:34  爱吃砂糖橘的白龙  阅读(414)  评论(0编辑  收藏  举报