Итак, мне нужно пройти через список объектов, используя некоторые из их значений для вычисления, а затем назначить им новые значения.Использование декораторов против итерации для установки значений?
Поскольку многим элементам в списке присваивается одно и то же новое значение, я использовал словарь для хранения списка элементов, для которых требуется такое же значение. Например:
item_dict = {}
for item in list:
value = item.value
if value not in item_dict:
item_dict[value] = [item]
else:
item_dict[value].append(item)
# do some calculations base on values
new_data # some dictionary created by computation
# new data is stored new_data[value] = new_value
for value, new_value in new_data.items():
items = item_dict[value]
for item in items:
item.value = new_value
я думаю об удалении для элемента в цикле пунктов с декоратор, так как все new_value (ов) для этого списка являются одинаковыми. Например:
def dec(item):
def wrap(value):
item.value = value
return wrap
def rec(item, func):
def wrap(value):
item.value = value
func(value)
return wrap
item_dict = {}
for item in list:
value = item.value
if value not in item_dict:
item_dict[value] = dec(item)
else:
item_dict[value] = rec(item, item_dict[value])
# do some calculations base on values
new_data # some dictionary created by computation
# new data is stored new_data[value] = new_value
for value, new_value in new_data.items():
items = item_dict[value]
items(new_value)
Будет ли мода декоратора быть более эффективной и насколько она будет иметь влияние на память? Есть ли лучшие способы сделать это?
Функция 'rec', с первого взгляда, выглядит как нет op. В чем его цель? – Eric
кричит, позвольте мне исправить это – Derek
Вам нужны 'items_dict', чтобы сделать свой расчет? Если вам просто нужно обновить все значения элементов на основе 'new_data', я думаю, что было бы проще просто перебирать ваш список один раз, каждый раз поднимая новое значение. Словарь поиска быстро. –