是否可以延迟作为函数调用一部分的表达式的求值?

Is it possible to delay the evaluation of an expression that is part of a function call?

在我的程序中多次出现这种模式:

if some_bool:
   print(f"some {difficult()} string")

我考虑过为此创建一个函数:

def print_cond(a_bool, a_string):
   if a_bool:
      print(a_string)

print_cond(some_bool, f"some {difficult()} string")

但这样做的结果是第二个参数总是被评估,即使 some_bool == False。有没有办法将 f 字符串的评估延迟到它实际打印的时间点?

您可以通过将 f 字符串放在 lambda 中来延迟 f 字符串的计算。

例如:

def difficult():
    return "Hello World!"

def print_cond(a_bool, a_string):
    if a_bool:
        print("String is:")
        print(a_string())  # <-- note the ()


print_cond(True, lambda: f"some {difficult()} string")

打印:

String is:
some Hello World! string