Вы не можете. * Подробные причины обсуждаются в справочнике по языку Python , но в основном то, что делает Python при вызове printL(A_minus_B)
, принимает значение, которое былос меткой A_minus_B
и создайте новую метку xlist
, которая ссылается на одно и то же.С этого момента метка xlist
не имеет абсолютно никакой связи с другой меткой A_minus_B
, и фактически значение, которое было помечено A_minus_B
или xlist
или что-либо еще, не имеет никакого отношения к какому-либо из имен, которыебыли использованы для маркировки.
* Ну, вы можете , используя некоторое глубокое "Python voodoo" ... вам в основном придетсяпопросите Python прочитать фрагмент исходного кода, где вы вызываете printL(A_minus_B)
, и извлечь из него имя переменной.Обычно это то, что вы, вероятно, не должны делать (не потому, что вы новичок, а потому, что это обычно указывает на то, что вы разработали свою программу неправильно), но отладка - один из тех случаев, когда это, вероятно, уместно.Вот один из способов сделать это:
import inspect, pprint
def print_values(*names):
caller = inspect.stack()[1][0]
for name in names:
if name in caller.f_locals:
value = caller.f_locals[name]
elif name in caller.f_globals:
value = caller.f_globals[name]
else:
print 'no such variable: ' + name
# do whatever you want with name and value, for example:
print "****************************"
print name
print (" entries : "),len(value)
print value
print "****************************"
Уловка в том, что когда вы вызываете эту функцию, вам нужно передать ей имя переменной, которую вы хотите вывести, а не саму переменную.,Поэтому вы бы назвали print_values('A_minus_B')
, а не print_values(A_minus_B)
.Вы можете передать несколько имен, чтобы распечатать их все, например print_values('A_minus_B', 'C_minus_D', 'foo')
.