как получить имя списка, переданного в качестве параметра функции в Python - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть функция ниже, я просто хочу вернуть "list_" из этого, но не смог достичь.любая помощь будет оценена.

import inspect

def f(*x, **y):
    _,_,_,lo=inspect.getargvalues(inspect.currentframe())
    print(list(lo.values()))        

list_=[1,2,3,4]
f(list_)

1 Ответ

0 голосов
/ 19 апреля 2019

Вы можете перебирать свои глобальные переменные, хранящиеся в globals(), и возвращать имя переменной, значение которой равно аргументу, указанному как x[0].Здесь мы используем next(), чтобы прекратить итерации по globals() и вернуть наше значение, как только мы найдем наше совпадение.

def f(*x, **y):
    return next(i for i in globals() if globals()[i] == x[0])

list_ = [1,2,3,4]
print(f(list_)) # -> "list_"

Или используя inspect

def f(*x, **y):
    callers_local_vars = inspect.currentframe().f_back.f_locals.items()
    return next(var_name for var_name, var_val in callers_local_vars if var_val is x[0])

print(f(list_)) # -> "list_"
...