假设我想解析一个有行的文本文件:
sampleMethod
sampleParameter
sampleParameter2
其中sampleMethod是方法的字符串,示例参数可以是任何类型的值。
我知道我可以使用getattr动态调用一些东西,因为我们知道模块和方法的名称:
output = getattr(componentName, sampleMethod)(sampleParameter)
但是如果有多个参数是我们动态发现的,我该怎么做呢?
例如,如果文本文件具有:
sampleMethod
sampleParameter
sampleParameter2
sampleParameter3
我们如何动态地做这样的事情?
output = getattr(componentName, sampleMethod)(sampleParameter, sampleParameter2, sampleParameter3)
您可以解压缩参数列表(特殊的*):
# you could dynamically build the list
parameterList = [sampleParameter, sampleParameter2, sampleParameter3]
# then pass as parameter
output = getattr(componentName, sampleMethod)(*parameterList)
请注意,如果您确信parameterList
不会大于sampleMethod
的参数数量,则不必使用任意参数列表(否则可能会出现运行时错误)。
如果您不确定,您仍然可以先对列表进行切片,或者使用任意参数列表。
您可以在函数定义的属性中使用*。它将把所有不匹配的参数处理成元组。例如:
def print_for(*args):
print args
print_for(1,2,3)
print_for(1,2,3,4)
from importlib.machinery import SourceFileLoader
inputParams = ["1st_param", "2nd_param", ....]
module=SourceFileLoader("module_name","absolute/path/to/pyfile").load_module()
method = getattr(module, "functionname")
result = method(*inputParams)
print(result)