2015-11-04 3 views
0

Я хотел бы иметь возможность получить доступ к имени переменной, передаваемой функции, например.python introspection - получить имя переменной, переданной функции

def f(x): 
    '''Returns name of list/dict variable passed to f''' 
    return magic(x) 

>>a = [1,2,3] 
>>print(f(a)) 
'a' 
>>print(f(2)) 
None 

Я подозреваю, что это возможно с помощью Python самоанализа, но я не знаю достаточно, чтобы понять инспектировать модуль. (NB Я знаю, что необходимость в функции типа magic() сомнительна, но это - это, что я хочу.)

+0

* «но это то, что я хочу» * - почему? Что вы на самом деле пытаетесь достичь ** с этим? И почему у меня это было для Google? – jonrsharpe

+0

Теперь, когда я вижу, что это дублирующийся вопрос, я перехожу назад вверх по вопросу до нисходящего. – rmunn

ответ

0

Собственно, это невозможно. В именах и значениях Python довольно раздельные. Внутри f, у вас есть доступ к значению из x, но не представляется возможным, чтобы узнать, что другие имена другие функции могут быть приведены к этому значению.

Подумайте, что имена как-то похожи на указатели на C. Если у вас есть указатель, вы можете узнать, на какой объект он указывает. Но если у вас есть объект, вы не можете узнать, какие указатели указывают на него.

+0

Вы, вероятно, не должны *, но это возможно. – jonrsharpe

+0

@jonrsharpe - Как? Даже со стекаными махинациями ... о, подождите. Возможно, это возможно, если вы затем сравнили каждое из имен вызывающего стека с 'x' через ссылочное равенство. Фу, какой уродливый взлом. – rmunn

+0

Да, это ... не очень. – jonrsharpe