如何在 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。
我不是一个非常有经验的程序员,我试图找到一个包含 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。