我正在使用第三方软件包,它通过对源对象进行昂贵的方法调用来定义结果对象:result_object = source_object.method(input_value)
。
我想在函数调用中修改result_object
,如下所示:
def modify_result(result_object, update_value):
result_object = source_object.method(update_value)
显然发布的代码不起作用;它只是创建一个被丢弃的本地result_object
。相反,我可以:
result_object
为非局部,并按上述方法对其进行修改result_object
类并添加modify_result
方法一些澄清。在这种情况下,result_object
被认为是全球性的吗?更重要的是,是否有一种更新result_object
的首选方法,以便其他功能可以访问它?
答案 0 :(得分:0)
在你的例子中,昂贵与廉价的操作有什么不太清楚 - 你只是展示昂贵的操作吗?
在任何情况下,听起来你都有昂贵的操作和便宜的操作,并且你希望能够在适用的情况下使用便宜的操作。要做到这一点,我认为你需要一个现有的对象来利用,所以我建议有一个可选的关键字参数来提供这样的对象,但是使得返回值是相同的结果类型,无论它是否被提供或不。类似的东西:
def process_data(new_data, existing_result=None):
if existing_result is None:
# create a new result object
return make_result_via_expensive_op(new_data)
else:
# modify an existing result object
existing_result.modify_via_cheap_op(new_data)
return existing_result
我不建议将其全球化。您可以更轻松地传递参考,并且更容易遵循代码。