【发布时间】:2017-07-19 16:41:20
【问题描述】:
我看到其他人问过一个问题,但我看到的唯一答案只是简单地解释了 python 没有像 C 这样的语言相同的按引用传递和按值传递的概念。 例如
x=[0]
def foo(x):
x[0] += 1
过去,我一直在使用这项工作,但它似乎非常不符合 Python 风格,所以我想知道是否有更好的方法来做到这一点。 让我们假设由于任何原因返回值不起作用,例如此代码在单独的线程上运行的情况。
【问题讨论】:
-
这并不是说您不能technically hack Python 始终“通过引用传递”。顺便提一句。在这些术语中,Python 总是通过引用传递(reference 对 Python 来说是一个模糊的概念),只是某些属性是可变的,而另一些则不是——非可变属性利用写时复制, tho, 所以你会产生他们没有通过引用传递的错觉。
-
Python 使用“按对象传递”,因此按引用传递或按值传递都不适用。您也可以使用生成器等技术。 stackoverflow.com/questions/27034395/…
-
这看起来像
XY problem。你不需要通过引用传递任何东西,你需要一个atomic counter。 -
@EricDuminil 抱歉,这不是 XY 问题,我仅包含该代码以帮助说明问题。我对 SO 有点陌生,如果您对如何更好地提出问题有所了解,以便这种区别更加明显,请编辑
-
没有通过引用传递。你认为那些告诉你 Python 不支持通过引用传递的人是在骗你吗?
标签: python