如何在不立即执行的情况下通过函数调用传递 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'))}
我想将带有函数参数的函数调用字典作为 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'))}