假设我有一个ScriptMetadata对象列表
class ScriptMetadata:
id = 1
script_name = "test"
script_run_start_time = 1
script_run_end_time = 3
..
..
我想提供一个如下所示的API
class ScriptInfoParser:
def get_filtered_data(filter_func):
[I've logic here to obtain a uber list of ScriptMetadata]
# apply the user supplied filter func on this uber list and return result
result = filter(filter_func, all_metadata_list)
return list(result)
如果我想提供一个filter func,以便为我提供script_name为“foo”的ScriptMetadata对象,我可以使用它
def get_foo_runs(script_metadata):
if script_metadata.script_name == "foo":
return script_metadata
print(ScriptInfoParser.get_filtered_data(get_foo_runs))
问题是我如何参数化filter func,这样我就可以有一个可以动态获取参数并应用过滤的函数了
get_script_runs(script_name):
<?? magic filter func>
return ScriptInfoParser.get_filtered_data(magic_filter_func) # returns scriptmetadata list that matches script_name
此外,我还想变得复杂,即不止一个参数,例如为script\u name=“foo”和script\u run\u end\u time提供scriptmetadata项<;2等
谢谢你的帮助
这是一个非常开放的问题,有很多方法可以做到这一点。对各种属性进行过滤的最可读的方法之一可能是将lambda传递到组合函数中
您还可以通过使用eval来缩短输入
相关问题 更多 >
编程相关推荐