Вы можете перебирать свои глобальные переменные, хранящиеся в 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_"