Я практически повторяю тот же код с одним незначительным изменением в каждой функции, но существенным изменением.Как использовать Python Decorator для изменения только одной части функции?
У меня есть около 4 функции, которые выглядят примерно так:
def list_expenses(self):
explist = [(key,item.amount) for key, item in self.expensedict.iteritems()] #create a list from the dictionary, making a tuple of dictkey and object values
sortedlist = reversed(sorted(explist, key = lambda (k,a): (a))) #sort the list based on the value of the amount in the tuples of sorted list. Reverse to get high to low
for ka in sortedlist:
k, a = ka
print k , a
def list_income(self):
inclist = [(key,item.amount) for key, item in self.incomedict.iteritems()] #create a list from the dictionary, making a tuple of dictkey and object values
sortedlist = reversed(sorted(inclist, key = lambda (k,a): (a))) #sort the list based on the value of the amount in the tuples of sorted list. Reverse to get high to low
for ka in sortedlist:
k, a = ka
print k , a
Я считаю, что это то, что они называют нарушение «всухую», однако я не имею ни малейшего представления, как я могу изменить это быть более DRYlike, поскольку у меня есть два отдельных словаря (expencedict и incomedict), с которыми мне нужно работать.
Я сделал несколько поисковых запросов и нашел что-то, называемое декораторами, и у меня есть очень общее представление о том, как они работают, но не знаю, как я применил бы его к этому.
Так что мой запрос/вопрос:
Является ли это кандидат на декоратор, а если декоратор необходимо, я мог получить намек на то, что декоратор должен делать?
Псевдокод в порядке. Я не против борьбы. Мне просто нужно что-то для начала.
Ответ Константина - это путь. Я просто хочу добавить, что этот вид обработки может быть написан гораздо более компактным образом, например: 'для k, i в сортировке (d.iteritems(), key = lambda t: t [1] .amount): print k, i.amount' – simleo
С этим я могу полностью вырезать понимание списка. Я знаю, что это может показаться глупым, но не могли бы вы рассказать мне, как работает лямбда: t t [1]? Как лямбда становится списком? – Kameron
Nvm, только что реализованный, отсортированный из iterkeys возвращает кортеж, и кортежи могут быть проиндексированы! Вы, ребята, потрясающие. – Kameron