用函数调用更新对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用函数调用更新对象相关的知识,希望对你有一定的参考价值。

我正在使用第三方软件包,它通过对源对象进行昂贵的方法调用来定义结果对象: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的首选方法,以便其他功能可以访问它?

答案

目前尚不清楚你的例子中昂贵的廉价操作是什么 - 你只是展示昂贵的操作吗?

在任何情况下,听起来你有一个昂贵的操作和便宜的操作,你希望能够使用适用的廉价操作。要做到这一点,我认为你需要一个现有的对象来利用,所以我建议有一个可选的关键字参数来提供这样的对象,但是使返回值成为相同的结果类型,无论它是否被提供。就像是:

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

我不建议把它变成全球性的。您可以更轻松地传递引用,并且更容易遵循代码。

以上是关于用函数调用更新对象的主要内容,如果未能解决你的问题,请参考以下文章

php 一个自定义的try..catch包装器代码片段,用于执行模型函数,使其成为一个单行函数调用

如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数

常用Javascript代码片段集锦

前端片段整理

片段 TextView 无法从 parcelable 对象更新

如何测量代码片段的调用次数和经过时间