我有两个不同版本的函数;它读取一个大文件(我在这里使它变得简单,并读取一个非常小的excel文件)。在
Version 1:
读取整个文件并返回行列表Version 2:
在生成器的帮助下逐行阅读
我想装饰这两个函数的输出,并根据不同的逻辑在每行的末尾添加一些内容,这就是为什么我认为我需要一个不同的定制装饰器。但是我不知道怎样才能在装饰师的帮助下实现它?尤其是当我有收益而不是回报的时候。在
版本1:
@dec
def readxls():
fileBook = xlrd.open_workbook('../decorator.xls')
sh = fileBook.sheet_by_name("Sheet1")
out = []
for row_index in xrange(1, sh.nrows):
out.append(sh.row_values(row_index))
return out
版本2:
^{pr2}$假设excel文件如下:
Col1 Col2 Col3
Val11 Val12 Val13
Val21 Val22 Val23
我想修饰输出以获得以下结果:
Col1 Col2 Col3 0 Col1Col2
Val11 Val12 Val13 1 Val11Val12
Val21 Val22 Val23 2 Val21Val22
为了得到这样的输出,我的dec1和dec2函数应该是什么?在
{或者说,对于第二个函数来说,对于一个新的结果,假设这个函数的结果是。有了这些知识,我们可以继续做一个装饰工,比如
(在这里,我使用^{} 来帮助维护装饰函数的一些元数据(不需要从功能角度考虑),并作为编写示例的指南)
在第一个decorator中,结果是整个列表,我只需向每个元素添加额外的元素并返回它,在第二个decorator中添加额外的元素,因为它们会维护生成器的结构
用这些装饰,结果现在是
[['val11', 'val12', 'val13', 1, 'val11val12'], ['val21', 'val22', 'val23', 2, 'val21val22']]
作为一个旁注,因为你的2函数做同样的事情,我宁愿保留生成器,当我需要一个列表调用
list(readxls())
时,我也会在函数签名中添加两个额外的变量,并使用默认值这些字符串使函数更灵活。在相关问题 更多 >
编程相关推荐