可以在Python中引用字典项吗?
我有一个函数,它使用相同的键重复索引到字典中。是否有可能提及有关项目可以在Python中引用字典项吗?,python,reference,Python,Reference,我有一个函数,它使用相同的键重复索引到字典中。是否有可能提及有关项目 def my_function(self, event): self.__observers[event] ... #this is get is performed multiple times observer_ref = self.__observers[event] #can I make this a reference to the value? 更新: 我们的目标是不要复制自己的东西。我在寻找类
def my_function(self, event):
self.__observers[event] ... #this is get is performed multiple times
observer_ref = self.__observers[event] #can I make this a reference to the value?
更新:
我们的目标是不要复制自己的东西。我在寻找类似C++的行为,例如
int x = 1
int& y = x #reference to y, not a copy
当然。你为什么不试试看呢 不过,正如一篇评论中所指出的,这取决于“引用”的含义。如果按照建议执行,分配给新变量不会改变dict
>>> d = {'a': 1}
>>> d['a']
1
>>> x = d['a']
>>> x
1
>>> x = 2
>>> d
{u'a': 1}
在Python中为名称(变量)赋值时,该变量只是对该值的引用 例如说
self.\uu observators[event]
以空列表开始,下面的代码可以正常工作:
assert self.__observers[event] == []
observer_ref = self.__observers[event]
observer_ref.append(1) # this modifies self.__observers[event]
assert self.__observers[event] == [1]
然而,正如BrenBarn所指出的那样,如果你随后给观测者分配一个新的值,它根本不会修改自我。观测者[事件]。这实际上取决于你所说的“参考”是什么意思。。。这也取决于你将如何处理引用。例如
class Test(object):
def __init__(self):
self.__observers = {'event1': {'test':'this'}, 'event2': {'test':'that'}}
def get_observers(self):
return self.__observers
def my_function(self, event):
observer_ref = self.__observers[event]
return observer_ref
if __name__ == '__main__':
t = Test()
my_event = 'event1'
print('From class: {}'.format(t.get_observers()[my_event]))
my_ref = t.my_function(my_event)
print('From my_function: {}'.format(my_ref))
my_ref['something'] = 'else'
print('From my_function after addition: {}'.format(my_ref))
print('From class after addition: {}'.format(t.get_observers()[my_event]))
my_ref = 'something else entirely'
print('From my_function after re-assignment: {}'.format(my_ref))
print('From class after re-assignment: {}'.format(t.get_observers()[my_event]))
结果:
From class: {'test': 'this'}
From my_function: {'test': 'this'}
From my_function after addition: {'test': 'this', 'something': 'else'}
From class after addition: {'test': 'this', 'something': 'else'}
From my_function after re-assignment: something else entirely
From class after re-assignment: {'test': 'this', 'something': 'else'}
基本上,如果您的
引用
指向某种类型的对象,则可以使用该引用来操纵该对象。您只是不能将引用的名称重新指定给其他对象,并使其反映在您从中提取引用的原始对象中。这取决于您认为“引用”的含义。所有赋值都会创建一个引用。不,有关Python中观察者模式的好文章,请参阅,