我有一个奇怪的问题。我想传递/更改一个函数的参数,该函数本身作为参数传递给其他函数。有关详细信息,请参阅以下代码
def generic_method(selector_type='CSS', selector=None, parent_element=None, postfunc=None):
# Do your stuff and get value of attr_value
print "Doing Stuff"
attr_value = '$123.70'
print "Post-Processing Step"
if postfunc:
attr_value = postfunc(attrval=attr_value)
return attr_value
# The 2 methods below are in separate file
from functools import partial
def method_in_bot():
p, q, r = 11, 12, 13
postfunc = partial(post_processing, 12, p, q, r, post=23)
value = generic_method('XPATH', '.class-name', 'parent_element', postfunc)
return value
def post_processing(y=None, *args, **kwargs):
attr_value = kwargs.get('attrval', 'None')
if attr_value:
return attr_value.split('$')
return []
因此,我使用post_processing
将generic_method
方法及其所有参数传递给functools's partial
,并将新变量attrval
传递给我的post_processing方法。但更可取的是将attr_value
直接传递或分配给变量y
到post_processing
。
我一直在寻找在运行时修改函数参数的方法。我在网上搜索并发现它们是python中的inspect
库,它告诉你传递给函数的参数。可以在这种情况下使用。
答案 0 :(得分:0)
在Python 3中,你可以做def post_processing(*args, y=None, **kwargs):
,那就是它。使用Python 2,您必须找到与partial
不同的技术。或者可以将其子类化为implementing functools.partial that prepends additional arguments。