Вы можете l oop на пары k / v dict
callers_local_vars
и проверить, что значение и значение dict указывают на один и тот же объект:
def logInputs(vars):
logging.info("\n\n========= Inputs =========\n")
for var in vars:
callers_local_vars = inspect.currentframe().f_back.f_locals
for var_name, var_val in callers_local_vars.items():
if var_val is var:
logging.info(var_name + ': ' + str(var))
break
Вывод:
========= Inputs =========
var1: ['a', 'b']
var2: 2
Предупреждение : сравнение is
, которое вы используете в данный момент, может ввести в заблуждение. Рассмотрим этот случай:
var0 = 2
var1 = ['a', 'b']
var2 = 2
var3 = 2
def logInputs(vars):
logging.info("\n\n========= Inputs =========\n")
for var in vars:
callers_local_vars = inspect.currentframe().f_back.f_locals
for var_name, var_val in callers_local_vars.items():
if var_val is var:
logging.info(var_name + ': ' + str(var))
break
logInputs([var1, var2])
, который выдаст var0: 2
вместо var1: 2
.