【发布时间】:2020-06-15 09:54:06
【问题描述】:
我已经看到与此主题相关的其他问题,但还没有真正找到以下简单问题的答案:
VB 代码:
Function f_x(ByRef x As Integer) x = x + 1 End Function Sub test() Dim w As Integer w = 2 Call f_x(w) MsgBox w End Sub
上面的输出是3,其中变量“w”是通过函数“F_x()”内的指针“x”修改的(即“通过引用”)。
我可以在 Python 中编写一个类似的函数,通过指针(即“通过引用”)修改单个数值变量吗?我知道列表或 Numpy 数组在传递给函数时会通过引用(自动)进行修改,但是单个数值变量呢?
编辑:根据下面的建议,我正在尝试用 Python 编写代码(这显然行不通):
def test_function(y): y = y + 1 x = 2 test_function(x) print(x)
上面的输出是 2,而不是 3。
编辑 2:为什么会有人为选择是通过引用(通过指针)还是通过值传递数值变量而烦恼?如果任务是编写计算效率高的代码并且处理大浮点数怎么办:这里,指针(“按引用”)只需要存储内存地址,而“按值”方法将必须“复制”函数内的整个变量。
【问题讨论】:
-
你应该尝试用 Python 编写它,并在它不起作用时来这里询问。不贴标签为Python的VB代码...
-
不,python 不支持引用调用。
-
@JanStuller 简单的答案就是“不,这不可能”。 Python 不支持类似 VB 的“ByRef”。
-
因为有人删除了,这里是重复的:stackoverflow.com/questions/986006/…
-
Python 不支持通过 ref 调用,但您可以为变量创建一个包装器对象。然后,您可以将对象传递给您的函数,并且该函数必须修改您的值。例如。 test_function(obj) 其中 test_function 执行:obj.y += 1