>>> a1=(1,2,3)
>>> a2=(14,5,6)
>>> x1=(a1,a2)
>>> xx=repr(x1)
>>> xx
'((1, 2, 3), (14, 5, 6))'
>>> xxx=str(x1)
>>> xxx
'((1, 2, 3), (14, 5, 6))'
实际上,我想从 x1 获取
('a1','a2')
我怎样才能做到这一点?
x1 = ('a1', 'a2')
但这没有任何意义。您的问题也没有 - Python 中的变量是对象的标签。但是没有办法找到这些标签的名称(即变量的名称) - 这是一个很好的例子,证明了为什么这没有任何意义:
a1 = a2 = (1, 2, 3)
print some_magic_function(a1)
print some_magic_function(a2)
在这两种情况下,该函数都将接收完全相同的对象——因此根本无法确定是否a1
通过a2
了。
你要字典吗?
>>> a1=(1,2,3)
>>> a2=(14,5,6)
>>> x1=dict(a1=a1,a2=a2)
>>> x1
{'a1': (1,2,3), 'a2': (14,5,6)}
>>> tuple(x1)
('a1', 'a2')
正如其他人所说,您无法获取变量的标签,因为它们是定义对象的命名空间的一部分,而不是对象本身。例如,如果您定义:
>>> a = 1
说世界上所有的 '1' 都有 label 是没有意义的a
。它只是在命名空间中引用的一种方式1
,而不是对象的属性。
如果您需要名称,您当然可以将其作为对象本身的一部分,作为 Eric 建议的字典,或者通过子类化元组:
>>> class _T(tuple):
... def __new__(cls, name, *args):
... self = tuple.__new__(cls, args)
... self.name = name
... return self
... def __repr__(self):
... return self.name
>>> def Tuple(s):
... return lambda *args: _T(s, *args)
>>> x = (Tuple('a1')(1, 2, 3), Tuple('a2')(4,5,6))
>>> print repr(x)
(a1, a2)
>>> x[0][1] # These are still tuples
2
或其他一些元类操作以尽可能接近您想要的,但您无法逃避使名称成为对象状态的一部分,一种或另一种方式。标签只是解释器,而不是对象属性。