我有一个对象数组。我有兴趣编写一个函数,它将在列表中找到特定对象并返回对它的引用。
想象一下,以下代码片段是可能的:
list1 = [1,2,3]
def find(q):
return q[0]
a = find(list1)
a = 0 # This should change the object that "a" is referencing to.
print list1 # [0, 2, 3] is desired as result.
使用C ++中的指针很容易,但我怎么能在python中做呢?
答案 0 :(得分:3)
要实现完全相同的语义可能是不可能的,但是使用get / set方法的代理可以实现类似的东西,虽然我不清楚究竟是什么以及为什么需要这个,所以最终的解决方案可能要复杂得多或简单,无论如何这是我的解决方案
def find(q):
return Pointer(q, 0)
class Pointer(object):
def __init__(self, alist, index):
self.alist = alist
self.index = index
def get(self):
return self.alist[self.index]
def set(self, value):
self.alist[self.index] = value
list1 = [1, 2, 3]
p = find(list1)
p.set(0)
print list1
输出:
[0, 2, 3]
答案 1 :(得分:2)
函数currying是获得类似于by-reference语义的效果的一种方法:
list1 = [1,2,3]
def accessor(alist, index, value=None):
if value is not None:
alist[index] = value
return alist[index]
def find(q):
def access_first(value=None):
return accessor(q, 0, value)
return access_first
a = find(list1)
print a() # This access the value that "a" references.
print a(0) # This changes the object that "a" is referencing to and returns its value.
print list1 # [0, 2, 3] is result.
输出:
1
0
[0, 2, 3]
答案 2 :(得分:0)
不可能,因为数字对象在Python中是不可变的。