我传递,我想转换到方法的字符串列表创建functools.partial * ARGS&* kwargs呼叫使用functools.partial:从解析字符串
[ 'object1.method1(arg1, arg2, 4, key=value)', 'object2.method2(6, arg1)' ...]
可以很容易地使用正则表达式来为functools.partial生成必要的'func'参数,但我有一段时间很容易将parens中的字符串转换为有效的* args和** kwargs传递给functools.partial。
每个列表项都保证是有效的Python。我只是无法想出一个快速,简单的方法来将诸如'arg1,arg2,4,key = value'之类的字符串转换为functools.partial可以使用的某些东西。我错过了什么?
更新:
我的appologies。我没有忘记重要的信息。这个参数在这个过程的范围内不是有效的标识符,因此'eval'不起作用。但是,它们在所使用的部分对象的范围内是正确的,因此它们可以作为文字“复制”。 我当前的过程返回一个字符串'arg1,arg2,4,this = that'。如果直接传递给functools.partial,则functools.partial会将其作为单个字符串参数“包装”。
嗯..我就越说明这一点,我越来越意识到,有没有办法做到这一点,除非这些标识符此范围内有效......
由于这些都是为泛音,都是“ARG1”,“ARG2”等将在后面提供用于值的占位符,而不是文字“4”和“6”的是大概将在创建中使用部分?什么是用于部分的命名参数的占位符与文字的语法? “object1”是一个占位符吗?也许如果你展示了之前和之后的情况 - “对于'blah',我会创建这个部分”。 – PaulMcG 2010-10-13 00:52:23
哪里定义了object1,arg1,arg2,object2等?即范围。它们是在locals()或globals()中定义的,还是你在创建functools.partial函数的地方定义的? eval是一个可行的选择吗? – snapshoe 2010-10-13 03:35:34