如何解决如何将参数传递给本身作为kwarg传递的函数
在下面的示例中,我尝试将参数传递给本身已作为kwarg传递的函数。在以下示例中,我没有成功从类'TestClass'中将参数传递给函数'func':
import sys,threading; from threading import Thread
def func(kwargs):
print('IN:',sys._getframe(0).f_code.co_name)
for key,value in kwargs.items() :
print ('KEY:',key,',VAL:',value,sep='')
class TestClass(Thread):
def __init__(self,name = sys._getframe(0).f_code.co_name,kwargs = None):
Thread.__init__(self)
self.name = name
self.kwargs = kwargs
print('IN:',self.name)
def run(self):
func = self.kwargs['func']
func_kwargs_inner = {'arg_1': 'INNER-1','arg_2': 'INNER-2'}
func() # how to pass func_kwargs_inner to func?
def main():
func_kwargs = {'arg_1': 'OUTER-1','arg_2': 'OUTER-2'} # these get passed
# func_kwargs = {} # func_kwargs never gets populated
kwargs = {'func': (lambda: func(func_kwargs))}
test = TestClass(name='my-test',kwargs=kwargs)
test.start()
print('PROGRAM END')
if __name__ == '__main__':
main()
如果我尝试将'func_kwargs_inner'传递给'func()',则会出现语法错误;如果我将参数列表保留为空-如示例中所示-结果为:
IN: my-test
IN: func
KEY:arg_1,VAL:OUTER-1
KEY:arg_2,VAL:OUTER-2
PROGRAM END
IN: my-test
IN: func
KEY:arg_1,VAL:INNER-1
KEY:arg_2,VAL:INNER-2
PROGRAM END
如何将'func_kwargs_inner'传递给'func()'?
解决方法
似乎,如果您做明显的事情,那么它将起作用,并且当前您的代码明确地避免传递所需的参数。具体来说,在您的TestClass.run
中,您没有将任何参数传递给func
,而是依赖于硬编码到lambda表达式中的函数参数。因此,更改您的行:
func() # how to pass func_kwargs_inner to func?
传递参数:
func(func_kwargs_inner)
然后在main
中代替该lambda
表达式:
kwargs = {'func': (lambda: func(func_kwargs))}
只需传递函数对象本身:
kwargs = {'func': func}
然后您将获得预期的输出:
IN: my-test
IN: func
PROGRAM END
KEY:arg_1,VAL:INNER-1
KEY:arg_2,VAL:INNER-2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。