Доступ к имени переменной - PullRequest
2 голосов
/ 18 декабря 2011

Я пытаюсь получить доступ к имени переменной. Например, если я вызываю функцию для печати списка (printL) и хочу напечатать имя моего списка "A_minus_B":

def printL (xlist):
    print "****************************"
    print "name of list"
    print (" entries :  "),len(xlist) 
    print xlist
    print  "****************************"
    return()

Как я могу заставить функцию печатать "A_minus_B" вместо "name of list", имя, которое я использовал при вызове функции printL(A_minus_B)?

Ответы [ 2 ]

1 голос
/ 18 декабря 2011

Вы не можете. * Подробные причины обсуждаются в справочнике по языку 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').

0 голосов
/ 18 декабря 2011

Альтернативный способ сделать это:

list_dict = {}     #creates empty dictionary
list_dict['list_a'] = [1,2,3,4,5,6]   # here you create the name (key)
nice_name = 'list_b'
list_dict[nice_name] = [7,8,9,10,11,12]   # here you use already existing string as name (key)

def list_info(ld):
    for key in sorted(ld):
        print "****************************"
        print key
        print " entries :  " ,len(ld[key]) 
        print ld[key]
        print  "****************************"

list_info(list_dict)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...