如何在 Python 中每次执行只打印一次

How to print only once per execution in Python

我不是一个非常有经验的程序员,我试图找到一个包含 Python 函数的库,该函数只会在第一次从同一个调用中调用此函数时打印一些内容,而不再打印脚本执行。因为我没有找到它,所以我创建了自己的,并且有效。但我不知道如何让它像 print(f'') 一样工作,所以我可以包含变量。 Loops+break 在这里不起作用。

这是现在的样子:

#dictionary so we don't have scope issues
already_printed = {}
def print_only_once(msg):
    try:
        testing = already_printed[msg]
    except KeyError:
        already_printed[msg] = msg
        print(msg)
    return

我使用以下方式称呼它:

print_only_once('my special message')

如果此消息之前已打印过,则不会再次打印。我也希望能够做这样的事情:

print_only_once(f'temp is {var1} and humidity is {var2}')

并且这条特殊消息在每次脚本执行时只会打印一次,无论它被调用了多少次,包括与第一次调用不同的 var1 and/or var2 值。

有什么帮助吗?也许那里有一些东西可以做到这一点,但我找不到。非常感谢!

在调用方格式化字符串时不能这样做,因为你的函数只接收格式化的字符串。

您需要让您的函数分别采用格式字符串和值。然后您可以将格式字符串保存在字典中,并显式调用 .format()

already_printed = set()
def print_only_once(format_string, *args, **kwargs):
    if format_string not in already_printed:
        print(format_string.format(*args, **kwargs))
        already_printed.add(format_string)

print_only_once('temp is {var1} and humidity is {var2}', var1=var1, var2=var2)

尝试做这样的事情:

already_printed = []


def print_only_once(msg_name, msg):
    if msg_name not in already_printed:
        already_printed.append(msg_name)
        print(msg)
    return

我添加了另一个名为“msg_name”的参数。你应该在那里写下消息的内容(比如给出一个组名)。然后你在“msg”中写下你的实际 text/message。