如何通过函数调用传递kwarg,而无需立即执行

问题描述

我想将带有函数参数的函数调用字典作为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')},以便知道dict中的值(在本例中均为None-显然不是您所需要的)打算)。

正如我所说,您需要传递一个实际函数,可以很容易地使用lambda(例如,通过其他方法)完成-不带参数的lambda并不常见,但允许使用:

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