微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将参数传递给本身作为kwarg传递的函数

如何解决如何将参数传递给本身作为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 举报,一经查实,本站将立刻删除。