Python 函数的模板,该函数创建了输入的修改版本,但不修改输入

template for python function that created modified version of input, but does not modify input

提问人:rcorty 提问时间:12/18/2020 更新时间:12/18/2020 访问量:21

问:

我的大部分编程经验都是用 R 语言编写的,我现在正在做一个 python 项目。我想制作一个像 R 函数一样工作的函数,因为它接受一个对象并返回一个类似的对象,但以某种方式发生了变化,并且初始对象在调用命名空间中保持不变。我这样做的“模板”是......

from copy import deepcopy
def cut_in_half(l):
    l_new = deepcopy(l)
    l_new = l_new[range(ceil(len(l_new)/2))]
    return l_new

这是一个玩具示例,但主要思想是我首先制作一个深度副本,然后修改它,然后返回它。这感觉有点笨拙,我不禁怀疑我是不是做错了什么。我是吗?

Python 按引用 deep-copy 按值传递

评论

1赞 tghw 12/18/2020
这有点笨拙。我认为问题是你试图保留什么,无论是在原始对象中还是在新对象中的原始对象中。如果对象以不同的方式使用,那么向包含修改数据的对象添加另一个成员呢?或者,如果它们以相同的方式使用,但在不同的时间使用,您是否可以使用原始对象,然后对其进行修改并在以后使用修改后的对象?
1赞 progmatico 12/18/2020
通常,复制是在调用代码中完成的,就在传递函数参数之前或传递时。这清楚地表明您正在制作和传递副本(保留原始对象),并避免了副作用的错误,因为该函数根本无法更改原始对象。

答: 暂无答案