复制通过引用方法传递的参数的最佳实践,避免无意中修改参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复制通过引用方法传递的参数的最佳实践,避免无意中修改参数相关的知识,希望对你有一定的参考价值。
我在执行以下代码行时的意图是使用cv2绘制我的原始图像(即img)。我可以说,它确实如此,但修改了img(这是不希望的)。
cbImg = cv2.drawChessboardCorners(img, (nx, ny), corners, ret)
我知道Python是传递引用,这意味着该方法可以改变参数。为避免修改原始图像,必须对副本进行操作(例如,如下所示)
cbImg = cv2.drawChessboardCorners(copy.copy(img), (nx, ny), corners, ret)
我将副本传递给cv2.drawChessboardCorners(),因为我无法修改该方法。但是,我已经看到了许多在该方法中执行复制的示例。
是否有关于应该进行复制的最佳做法?换句话说,如果我使用别人的方法,我是否应该总是传递副本以确保我的原始图像不被修改?或者,在编写自己的方法时,我是否应该总是(或从不)在我的方法中执行复制,以确保我不会无意中修改其他人的论点?此外,通常建议假设通过引用传递的参数应该被修改(或不修改)?
答案
最佳做法是让职能明确是否修改其论点。理想情况下,他们不会,因为这更容易推理。如果数据不大,则创建并返回新值是一个选项。
只有在知道函数修改其参数的事实时才制作副本,并且您肯定需要原始值和修改后的值。
以上是关于复制通过引用方法传递的参数的最佳实践,避免无意中修改参数的主要内容,如果未能解决你的问题,请参考以下文章