python 中是否可以通过引用传递引用?在C++中,可以通过向数据传递指针来模仿Python传递数据的模型:指针按值传递,函数可以更改它指向的任何内容,但函数不能更改指针的值。但是,在 C++ 中,您还可以传递对指针的引用,在这种情况下,您可以修改指针值及其指向的内容。
我想到的是以下 C++ 代码片段的类似内容,
#include <iostream>
int k=5;
void fun(int * &p)
{
p=&k;
}
int main()
{
int i=3;
int *p = &i;
std::cout << *p << std::endl;
fun(p);
std::cout << *p << std::endl;
}
该函数改变传入的指针p的值;输出是“3”和“5”。
如果我在上面的函数声明中删除“&”,我会得到类似于以下 python 代码片段的内容:
def fun(p):
p=5
p=3
print p
fun(p)
print p
其中打印 3 两次,因为 fun 无法更改主体中“引用”p 的值。有什么办法可以得到上面 C++ 中的行为吗?
(为了完整性:我知道python的数据传递模型与按值传递指针不同,因为你不需要在函数内显式地取消引用它。它更像是按值传递引用。但是,我不能写上面的 C++ 示例通过引用传递引用,因为 C++ 不允许我更改引用。所以请忽略该差异)。
你不能。Python是按赋值传递的 http://docs.python.org/3/faq/programming.html#how-do-i-write-a-function-with-output-parameters-call-by-reference
替代解决方案是提供类的实例或可变容器,但从长远来看这些都是坏主意,最好再次返回值并通过将返回值分配给全局变量来修改全局变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)