如何在不立即执行的情况下通过函数调用传递 kwargs

How to pass kwargs with function calls without immediate execution

我想将带有函数参数的函数调用字典作为 kwargs 传递给另一个函数。不幸的是,传递的函数会立即执行,而不是像以下示例所示那样传递:

def info(info='NO INFO'):  # just a test function
    print(); print('\'', info, '\'', sep=""); print()

kwargs = {'one': info('executed one'), 'two': info('executed two')}

这导致:

'executed one'


'executed two'

如何防止这些参数被执行并传递出去?

您传递的不是函数,而是函数调用的结果。 Python 必须在到达该行后立即调用函数:kwargs = {'one': info('executed one'), 'two': info('executed two')} 以便了解字典中的值(在本例中都是 None -显然不是你想要的)。

正如我所说,您需要传递一个实际的函数,这可以通过(例如,还有其他方法)lambda 轻松完成 - 不带参数的 lambda 不常见但允许:

kwargs = {'one': (lambda: info('executed one')), 'two': (lambda: info('executed two'))}