为什么 time.sleep() 一次发生而不是一次发生一个?
Why does time.sleep() happen all at once instead of one at a time?
我正在尝试制作一个小动画类型的东西,它打印 R 然后等待 0.5 秒,o 然后等待 0.5 秒,依此类推直到结束。
这是我写的代码:
import time
def rolling():
print('R', end = '')
time.sleep(.5)
print('o', end = '')
time.sleep(.5)
print('l', end = '')
time.sleep(.5)
print('l', end = '')
time.sleep(.5)
print('i', end = '')
time.sleep(.5)
print('n', end = '')
time.sleep(.5)
print('g', end = '')
time.sleep(.5)
当我运行等待3.5秒然后打印整个字。有什么建议吗?
程序的输出是行缓冲的(在任何常见情况下都是如此),因此,由于您没有打印任何换行符 (\n
),结果仅在最后写入控制台立即执行。
为确保每次调用 print()
立即产生输出,您可以添加 flush=True
(感谢 pink spikyhairman 指出这一点,我当时并不知道该功能写原始答案):
import time
def rolling():
print('R', end = '', flush=True)
time.sleep(.5)
print('o', end = '', flush=True)
time.sleep(.5)
您甚至可以直接使用 sys.stdout.write()
和 .flush()
代替:
import time
import sys
def rolling():
sys.stdout.write('R')
sys.stdout.flush()
time.sleep(.5)
sys.stdout.write('R')
sys.stdout.flush()
time.sleep(.5)
# ...
我正在尝试制作一个小动画类型的东西,它打印 R 然后等待 0.5 秒,o 然后等待 0.5 秒,依此类推直到结束。 这是我写的代码:
import time
def rolling():
print('R', end = '')
time.sleep(.5)
print('o', end = '')
time.sleep(.5)
print('l', end = '')
time.sleep(.5)
print('l', end = '')
time.sleep(.5)
print('i', end = '')
time.sleep(.5)
print('n', end = '')
time.sleep(.5)
print('g', end = '')
time.sleep(.5)
当我运行等待3.5秒然后打印整个字。有什么建议吗?
程序的输出是行缓冲的(在任何常见情况下都是如此),因此,由于您没有打印任何换行符 (\n
),结果仅在最后写入控制台立即执行。
为确保每次调用 print()
立即产生输出,您可以添加 flush=True
(感谢 pink spikyhairman 指出这一点,我当时并不知道该功能写原始答案):
import time
def rolling():
print('R', end = '', flush=True)
time.sleep(.5)
print('o', end = '', flush=True)
time.sleep(.5)
您甚至可以直接使用 sys.stdout.write()
和 .flush()
代替:
import time
import sys
def rolling():
sys.stdout.write('R')
sys.stdout.flush()
time.sleep(.5)
sys.stdout.write('R')
sys.stdout.flush()
time.sleep(.5)
# ...