【问题标题】:Python modify single variable by referencePython通过引用修改单个变量
【发布时间】: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

标签: python pass-by-reference


【解决方案1】:

你可以把你的变量放在一个可变对象中,比如字典:

def test_function(y):
    y['x'] = y['x'] + 1

d = {'x': 2} 
test_function(d) 
print(d['x'])

原始类型是不可变的。

【讨论】:

    猜你喜欢
    • 2012-03-16
    • 1970-01-01
    • 2013-06-22
    • 2019-06-15
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 2012-02-14
    • 2015-01-31
    相关资源
    最近更新 更多