-7
>>> 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')

我怎样才能做到这一点?

4

3 回答 3

2
x1 = ('a1', 'a2')

但这没有任何意义。您的问题也没有 - Python 中的变量是对象的标签。但是没有办法找到这些标签的名称(即变量的名称) - 这是一个很好的例子,证明了为什么这没有任何意义:

a1 = a2 = (1, 2, 3)
print some_magic_function(a1)
print some_magic_function(a2)

在这两种情况下,该函数都将接收完全相同的对象——因此根本无法确定是否a1通过a2了。

于 2013-09-18T10:57:42.417 回答
0

你要字典吗?

>>> 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')
于 2013-09-18T11:00:53.287 回答
0

正如其他人所说,您无法获取变量的标签,因为它们是定义对象的命名空间的一部分,而不是对象本身。例如,如果您定义:

>>> 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

或其他一些元类操作以尽可能接近您想要的,但您无法逃避使名称成为对象状态的一部分,一种或另一种方式。标签只是解释器,而不是对象属性。

于 2013-09-18T11:11:17.777 回答