Python 如何通过函数调用传递KWARG而不立即执行

Python 如何通过函数调用传递KWARG而不立即执行,python,parameter-passing,keyword-argument,Python,Parameter Passing,Keyword Argument,我想将带有函数参数的函数调用的dict作为KWARG传递给另一个函数。不幸的是,传递的函数会立即执行,而不是如以下示例所示传递: def info(info='NO INFO'): # just a test function print(); print('\'', info, '\'', sep=""); print() kwargs = {'one': info('executed one'), 'two': info('executed two')} 其

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

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
,显然不是您想要的)

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

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

但是无论他传递给谁,都需要知道它必须调用这些值,而不仅仅是引用它们。是的,当然。对我来说,这在最初的问题中是隐含的:OP希望将字典中的函数传递给以后调用,而不是像错误的尝试那样立即调用函数。也许我误解了,但如果是这样,我希望OP能澄清。我怀疑他是否理解这些。我认为他想做一些像
有趣的事(**kwargs)
这似乎很管用
code
kwargs={'one':(lambda:info('executed one'),'two':(lambda:info('executed two'))}print(kwargs.keys())kwargs['one']()
code
Output:dict_-keys(['one','two'])kwargs['one'])我在格式化上面的评论时有点问题。这里有一个改进的方法:我正在尝试创建一个线程,该线程有一个目标函数,该函数以dict形式传递的函数调用数量可变。@RobinZigmond提出的解决方案似乎有效。语句'kwargs['one']()'产生'executed one',这是函数调用的结果。
info()
甚至不返回任何内容。传递参数时,您希望参数值是什么?