【问题标题】:How to stop function executing before being called in Python 3如何在 Python 3 中调用之前停止函数执行
【发布时间】:2019-05-24 07:11:58
【问题描述】:

我正在将我无缘无故编写的 C++ 程序移植到 Python 3。有一个使用 spin() 函数的 spinner() 函数。这些在程序顶部显示一个横幅。但是,由于某种原因,我无法弄清楚, spin() 函数在被调用之前正在执行。 sleep(1) 也在被调用之前被执行。我无法弄清楚为什么这些在被调用之前被执行。它当前执行 sleep() 函数,然后是 spin() 函数,然后再被调用。在显示第一个数组项之前,它们不应执行。

我尝试将 spin() 和 sleep() 函数放在不同的位置,以尝试解决调用它的位置,但这样做会破坏当前的功能。

import time
import sys

def spin():
    spinner = ['/', '-', '\\', '|', '']
    for i in spinner:
        sys.stdout.write(i)
    time.sleep(1)
    sys.stdout.write("\b")
    sys.stdout.flush()

def spinner():
    text = "\tVigenere Cipher\n"
    textArray = list(text)
    for i in range(len(textArray)):
        for x in range(i):
        sys.stdout.write(textArray[x])
    spin()
    sys.stdout.write("\r")
    sys.stdout.flush()
spinner()

我希望它从 textArray 中打印一个字符、显示微调器、打印下一个字符、显示微调器等。

实际结果是它先休眠,打印微调器,然后打印第一个字符。

【问题讨论】:

  • 只是让您知道将字符串放入 list 是不必要的,str 对象是序列

标签: python python-3.x function


【解决方案1】:

您需要在sleep 之前调用sys.stdout.flush() 之前,而不是之后flush 是强制文本从缓冲区到屏幕的魔法,在 sleep 之后执行此操作意味着您(通常;缓冲是一个实现细节)在 sleep 完成之前不会看到任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    相关资源
    最近更新 更多