在循环中动态调用和打印函数的 return 值,覆盖以前的输出

Dynamically call and print a function's return-value within a loop, overwrite previous outputs

我正在寻找在 python 3.

中动态打印变量的最简洁方法

我想重复调用 psutil.virtual_memory() 并在适当的位置打印其 return 值。

像这样:

import psutil
import time

memory = psutil.virtual_memory()

while True:
    print(f"Memory: {memory}")
    time.sleep(0.5)

当然不会是动态的。我希望 "memory" 在同一行上每 0.5 秒更新一次。

我似乎找不到一个清晰的示例来说明如何以这种方式执行此操作。

更新:我也想了解如何使用多行打印语句执行此操作。

像这样

Memory:    500MB
CPU Usage: 25%

添加回车 return 以进行打印。

import psutil
import time

def memory():
    return psutil.virtual_memory()

while True:
    print(f"Memory: {memory()}", end="\r", flush=True)
    time.sleep(0.5)

只需将 print(..., end='\r') 添加到打印语句的末尾即可。

这会将光标带到行首,因此后续打印将覆盖它。

f-strings 允许您首先直接打印函数调用或表达式,所以就这样做吧。 (首先不需要将过时的 return 值存储到变量中)

while True:
    print(f"Memory: {psutil.virtual_memory()}")
    time.sleep(0.5)

更新:在您接受答案后,我们推断当您说 “就地打印值” 时,您实际上是指 "覆盖之前打印的输出(在控制台上)"

“就地”实际上是一个不同的术语,通常指的是“不分配新内存的变量赋值”。最好说 “在控制台上覆盖”