2014-10-12 3 views
1

Есть ли способ получить переменную name в нижеследующем?getattr в текущей функции

def save_info(self): 
    name = 'hello' 
    var1 = 'other item' 
    var2 = 1 
    ... 
    TV_SERIES_FIELDS_TO_UPDATE = ['name', 'var2', 'var3', 'var4', ...] 
    for field in TV_SERIES_FIELDS_TO_UPDATE: 
     current_value = getattr_or_none(obj, field) 
     new_value = # how do I get the variable of `name` ("hello") ? 

Учитывая строку с именем переменной, как бы получить ее значение в текущей функции?

+0

... что? Вы пробовали 'new_value = name' ?! – jonrsharpe

+0

Что именно вы подразумеваете под «переменной« имя »? – NPE

+0

@NPE см. Обновленный вопрос – David542

ответ

1

Использование locals():

def save_info(): 
    name = 'hello' 
    var1 = 'other item' 
    var2 = 1 
    TV_SERIES_FIELDS_TO_UPDATE = ['name', 'var1', 'var2'] 
    for field in TV_SERIES_FIELDS_TO_UPDATE: 
     print field, locals()[field] 

save_info() 

Однако я призываю вас рассмотреть вопрос об использовании явного словаря вместо того, чтобы иметь кучу несвязанных переменных.

1

У вас есть две опции

доступа к локальным переменным

def save_info(self): 
    name = 'hello' 
    var1 = 'other item' 
    var2 = 1 
    ... 
    TV_SERIES_FIELDS_TO_UPDATE = ['name', 'var2', 'var3', 'var4', ...] 
    for field in TV_SERIES_FIELDS_TO_UPDATE: 
     current_value = getattr_or_none(obj, field) 
     new_value = locals().get(field) 

но если вы были, я бы переписать код и использовать словарь.

TV_SERIES_FIELDS_TO_UPDATE = { 'name_of_the_show': 'value', 'second_show': 'value2' } 
for key, value in TV_SERIES_FIELDS_TO_UPDATE.items(): 
    new_value = # od some magic with value 
Смежные вопросы