什么是通过引用传递的正确方法

时间:2017-07-19 16:41:21

标签: python

我已经看到其他人提出一个问题,但我看到的唯一答案只是解释了python没有相同的概念,通过引用传递vs传递值像C一样的语言。 例如

    x=[0]
    def foo(x):
        x[0] += 1

在过去,我一直在使用这项工作,但它看起来非常不像pythonic,所以我想知道是否有更好的方法来做到这一点。 让我们假设返回值不起作用的原因,例如此代码在单独的线程上运行的情况。

1 个答案:

答案 0 :(得分:2)

某些python对象是不可变的(tupleintfloatstr等。如您所知,您无法就地修改这些内容。

最好的解决方法是尝试伪造通过引用传递,而是应该分配结果。这更容易阅读,也不容易出错。

在您的情况下,您可以致电:

x = 0
def f(x):
    return x + 1

x = f(x)

如果你真的需要假冒传递参考(我不明白为什么你需要它),你的解决方案工作正常,但请记住你实际上没有修改对象。

x = 0
x_list = [x]
print(id(x_list[0]))  # 1844716176

def f(x_list):
    x_list[0] += 1

f(x_list)
print(x)  # 0,  not modified
print(id(x_list[0]))  # 1844716208