首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中模拟指针

在Python中模拟指针
EN

Stack Overflow用户
提问于 2009-07-17 21:14:00
回答 10查看 95K关注 0票数 55

我正在尝试将内部语言(Ihl)交叉编译为Python。

ihl的一个特性是指针和引用,它们的行为就像你在C或C++中所期望的那样。

例如,您可以这样做:

代码语言:javascript
复制
a = [1,2];  // a has an array 
b = &a;     // b points to a
*b = 2;     // derefernce b to store 2 in a
print(a);   // outputs 2
print(*b);   // outputs 2

有没有办法在Python中复制这个功能。

,我应该指出,我想我把一些人搞糊涂了。我不需要Python中的指针。我只是想从Python专家那里得到一些感觉,我应该生成什么样的Python来模拟我在上面展示的情况

我的Python不是最好的,但到目前为止,我的探索还没有产生任何有希望的东西:

我应该指出的是,我们正在寻求从ihl迁移到一种更通用的语言,所以如果有人可以推荐另一种更合适的语言,我们就不会真正与Python捆绑在一起。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-07-17 21:49:07

这可以显式地完成。

代码语言:javascript
复制
class ref:
    def __init__(self, obj): self.obj = obj
    def get(self):    return self.obj
    def set(self, obj):      self.obj = obj

a = ref([1, 2])
b = a
print(a.get())  # => [1, 2]
print(b.get())  # => [1, 2]

b.set(2)
print(a.get())  # => 2
print(b.get())  # => 2
票数 83
EN

Stack Overflow用户

发布于 2009-07-17 21:20:22

您可能想要阅读。底线是:所有的变量都是引用

更重要的是,不要考虑变量,而是可以命名的对象。

票数 24
EN

Stack Overflow用户

发布于 2009-07-17 22:01:57

如果你正在编译一种类似C的语言,比如:

代码语言:javascript
复制
func()
{
    var a = 1;
    var *b = &a;
    *b = 2;
    assert(a == 2);
}

到Python中,那么所有“Python中的一切都是引用”之类的东西都是用词不当的。

诚然,Python中的一切都是引用,但许多核心类型( in、字符串)是不可变的,这一事实在许多情况下有效地取消了这一点。在Python中没有直接实现上述功能的方法。

现在,您可以间接地执行此操作:对于任何不可变类型,将其包装在可变类型中。Ephemient的解决方案有效,但我经常这样做:

代码语言:javascript
复制
a = [1]
b = a
b[0] = 2
assert a[0] == 2

(我这样做是为了解决Python在2.x中缺少“非本地”的问题。)

这意味着更多的开销:每个不可变类型(或者每个类型,如果您不尝试区分)突然创建一个列表(或另一个容器对象),因此您会显著增加变量的开销。单独来说,这不是很多,但当应用到整个代码库时,它会增加的。

您可以通过仅包装不可变类型来减少这种情况,但是您需要跟踪输出中哪些变量被包装,哪些没有包装,这样您就可以适当地使用"a“或"a”访问值。它可能会变得多毛。

至于这是不是一个好主意--这取决于你为什么要这么做。如果你只是想要一些东西来运行虚拟机,我倾向于说不。如果您希望能够从Python调用您现有的语言,我建议使用您现有的VM并为其创建Python绑定,这样您就可以从Python访问和调用它。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1145722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档