我可以像在 c++ 中使用指针一样修改函数中的变量而不在 python 中返回吗
Posted
技术标签:
【中文标题】我可以像在 c++ 中使用指针一样修改函数中的变量而不在 python 中返回吗【英文标题】:Can i modify variable in function without return in python like using pointers in c++ 【发布时间】:2022-01-14 02:33:33 【问题描述】:我只是想学习如何在 python 中编写这个 c++ 代码?
#include <iostream>
void modify(int* a)
*a = 20;
int main()
int x = 10;
modify(&x);
std::cout << x;
// OUTPUT: 20
return 0;
【问题讨论】:
你可以通过将要变异的整数放在一个列表中来模仿它,但这不是惯用的。 Python 没有指针 我知道python没有,但我不能在python中做这样的函数 这有帮助吗:***.com/a/986145/9814037?楼主的回答不错。 此外,关于指针这里是一个理论:***.com/a/3106752/9814037 【参考方案1】:这不适用于整数,因为 python 中的整数是完全不可变的。您不能在 python 中更改整数。 例如,当您执行 a += 1 时,您将创建一个值为 a + 1 的新 int 并将变量 a 绑定到它。 现在,最简单的方法是使用一些引用类型,比如类。
class IntRef:
def __init__(self, a):
self.a = a
def modify(some):
some.a = 20
ir = IntRef(10)
modify(ir)
print(ir)
【讨论】:
【参考方案2】:简单的答案是“你不能”。但是,如果您有一个需要等效行为的用例,最简单的方法是将变量包装成可变类型。我会做以下事情:
def modify(a):
a[0] = 20
x = [10]
modify(x)
print(x[0])
【讨论】:
是的,这行得通,但我不明白为什么行得通。不应该是函数中的局部变量吗? @cacarekta
表示列表,而不是列表的内容。因此,当我们说a[0] = 20
时,我们正在更改列表的内容,但列表本身不受影响。具体来说,a
是对列表开头的引用。我们没有改变开始的地方,只改变了之后的内容。
为此滥用列表将对性能产生极大的不利影响。这不是 C,列表不是固定大小并被编译掉。改用类
@DownloadPizza 没有迹象表明性能是一个问题。这更简单,类更快,更好的是完全依赖于上下文。以上是关于我可以像在 c++ 中使用指针一样修改函数中的变量而不在 python 中返回吗的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中结束函数,就像在 C++ 中使用“return”一样 [关闭]
有没有办法像在 C++ 中挂钩非托管函数一样在 C# 中挂钩托管函数?