>>> 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
が渡されたかどうかを判断する方法はありません。
他の人が言ったように、変数はオブジェクト自体ではなく、オブジェクトが定義されている名前空間の一部であるため、変数のラベルを取得することはできません。たとえば、次のように定義するとします。
>>> 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
または、他のメタクラス操作により、必要なものにできるだけ近づけることができますが、名前をオブジェクトの状態の一部にすることから逃れることはできません。ラベルは単なるインタープリターであり、オブジェクト プロパティではありません。
辞書が欲しいですか。
>>> 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')