有没有一种方法可以在python中将名称组合在一起,并重复地将它们分配给它们?
在我们能够做到的时候:
a,b,c = (1,2,3)我希望能做这样的事情:
names = a,b,c
*names = (3,2,1) # this syntax doesn't work
a,b,c == (3,2,1) #=> True这有内置语法吗?如果不是,我假设有一个重载其赋值操作符的对象是可能的。在这种情况下,是否有一个现有的实现,这一概念是否有任何意外的失败模式?
重点不在于将名称用作数据,而在于能够使用实际名称作为变量,每个变量引用各自的单独项,并能够将列表用作列表,并避免使用以下代码:
a = 1
b = 2
c = 3
sequence = (a,b,c)发布于 2012-02-24 15:53:50
这?
>>> from collections import namedtuple
>>> names = namedtuple( 'names', ['a','b','c'] )
>>> thing= names(3,2,1)
>>> thing.a
3
>>> thing.b
2
>>> thing.c
1发布于 2012-02-24 15:17:08
您应该在数据抽象中提高一级。您并不试图通过条目的单个名称来访问它们--而是使用names来表示整个值集合,因此一个简单的列表可能就是您想要的。
如果同时使用集合的名称和单个项的名称,则可以使用字典:
names = "a b c".split()
d = dict(zip(names, (1, 2, 3)))
d.update(zip(names, (3, 2, 1)))如果重复需要这样的内容,您可能需要定义一个名称为属性的类:
class X(object):
def __init__(self, a, b, c):
self.update(a, b, c)
def update(self, a, b, c)
self.a, self.b, self.c = a, b, c
x = X(1, 2, 3)
x.update(3, 2, 1)
print x.a, x.b. x.c这反映出您希望将a、b和c阻塞到某些公共结构中,但保留按名称单独访问它们的选项。
发布于 2012-02-24 15:12:30
您应该使用
>>> d = {"a": 1, "b": 2, "c": 3}
>>> d.update({"a": 8})
>>> print(d)
{"a": 8, "c": 3, "b": 2}https://stackoverflow.com/questions/9433021
复制相似问题