gpt4 book ai didi

python - 如何使用 Python Decorator 只改变函数的一部分?

转载 作者:太空宇宙 更新时间:2023-11-04 10:30:22 31 4
gpt4 key购买 nike

我实际上是在重复相同的代码,每个函数只有一个小的变化,但这是一个本质的变化。

我有大约 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

我相信这就是他们所说的违反“DRY”的东西,但是我不知道如何将其更改为更像 DRY,因为我需要两个单独的词典(expensedict 和 incomedict)一起工作。

我进行了一些谷歌搜索,发现了一种叫做装饰器的东西,我对它们的工作原理有一个非常基本的了解,但不知道我将如何将其应用到这里。

所以我的请求/问题:

  1. 这是装饰器的候选者吗,如果装饰器是有必要,我能得到装饰者应该做什么的提示吗?

  2. 伪代码很好。我不介意挣扎。我只是需要一些东西开始。

最佳答案

您如何看待使用单独的函数(作为私有(private)方法)进行列表处理?例如,您可以执行以下操作:

def __list_processing(self, list): 
#do the generic processing of your lists

def list_expenses(self):
#invoke __list_processing with self.expensedict as a parameter

def list_income(self):
#invoke __list_processing with self.incomedict as a parameter

它看起来更好,因为所有复杂的处理都在一个地方,list_expenseslist_income 等是相应的包装函数。

关于python - 如何使用 Python Decorator 只改变函数的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27167702/

31 4 0