如何保持许多变量相等而不每次都分配给它们?
How to keep many variables equal without assigning to them all every time?
我想做的是保持三个变量相等,而不是每次都分配它们。
a=b=c=4
b=10
print a,b,c # 4 10 4
或者换句话说,如果我有很多变量,如果其中一个发生变化,如何使其他变量也发生变化?
print a # a=10
print b # b=10
print c # c=10
如何在整个代码中保持多个变量相等?
我知道我可以轻松地重新分配它们。
有没有比这更好的方法,或者我必须每次都分配所有变量?
这是一种面向对象的方式,它正式化了我在评论中提出的建议 — 基本上是将共享对象放入一个可变容器中,例如列表。
from __future__ import print_function
class Mutable(object):
def __init__(self, value):
self._value = [value]
def get_value(self):
return self._value[0]
def set_value(self, value):
self._value[0] = value
value = property(get_value, set_value)
def __repr__(self):
return repr(self.get_value())
class Pointer(Mutable):
def __init__(self, obj):
if not isinstance(obj, (Mutable, Pointer)):
raise ValueError(
"{!r} is not a object of type Mutable or Pointer".format(obj))
self._value = obj._value
if __name__ == '__main__':
a = Mutable(0)
b = Pointer(a)
c = Pointer(b)
print(a, b, c) # -> 0 0 0
a.value = 13
print(a, b, c) # -> 13 13 13
b.value = 42
print(a, b, c) # -> 42 42 42
我想做的是保持三个变量相等,而不是每次都分配它们。
a=b=c=4
b=10
print a,b,c # 4 10 4
或者换句话说,如果我有很多变量,如果其中一个发生变化,如何使其他变量也发生变化?
print a # a=10
print b # b=10
print c # c=10
如何在整个代码中保持多个变量相等? 我知道我可以轻松地重新分配它们。 有没有比这更好的方法,或者我必须每次都分配所有变量?
这是一种面向对象的方式,它正式化了我在评论中提出的建议 — 基本上是将共享对象放入一个可变容器中,例如列表。
from __future__ import print_function
class Mutable(object):
def __init__(self, value):
self._value = [value]
def get_value(self):
return self._value[0]
def set_value(self, value):
self._value[0] = value
value = property(get_value, set_value)
def __repr__(self):
return repr(self.get_value())
class Pointer(Mutable):
def __init__(self, obj):
if not isinstance(obj, (Mutable, Pointer)):
raise ValueError(
"{!r} is not a object of type Mutable or Pointer".format(obj))
self._value = obj._value
if __name__ == '__main__':
a = Mutable(0)
b = Pointer(a)
c = Pointer(b)
print(a, b, c) # -> 0 0 0
a.value = 13
print(a, b, c) # -> 13 13 13
b.value = 42
print(a, b, c) # -> 42 42 42