我定义了一个函数createDictionary
,它接受一个文件,从该文件中提取键,并使用这些键为矩阵中的数据值编制索引。然后返回它,将索引用作键,并将值作为python字典中的值检索。
我的目标是编写一个getData
函数,它将根据用户传递给它的矩阵和其他参数的数量来调用和运行createDictionary
一定次数。
def getData(bedfile, matrix1, start1, end1, matrix2, start2, end2, matrix3, start3, end3, bedfilesep = "t", matrixsep = "t"):
x = createDictionary(bedfile, matrix1, start1, end1, bedfilesep, matrixsep)
y = createDictionary(bedfile, matrix2, start2, end2, bedfilesep, matrixsep)
z = createDictionary(bedfile, matrix3, start3, end3, bedfilesep, matrixsep)
x.update(y)
x.update(z)
return x.values()
理想情况下,我可以传递任意数量的matrix#
、start#
和end#
参数,并针对这些参数的出现次数运行此函数。
实际上您想要使用不同的数据结构。每当你发现自己定义了x1,x2,x3。。。x913等,请考虑使用列表!
函数看起来是这样的:
def getData(bedfile, matrixlist, bedfilesep = "t", matrixsep = "t"):
x = createDictionary(bedfile, matrixlist[0][0], matrixlist[0][1], matrixlist[0][2], bedfilesep, matrixsep)
y = createDictionary(bedfile, matrixlist[1][0], matrixlist[1][1], matrixlist[1][2], bedfilesep, matrixsep)
z = createDictionary(bedfile, matrixlist[2][0], matrixlist[2][1], matrixlist[2][2], bedfilesep, matrixsep)
...
并且您需要将矩阵打包到列表中,例如将它们存储在元组中:
mylist = []
mylist.append((m1, s1, e1))
mylist.append((m12, 12, 33))
然后你可以通过调用一次通过整个列表
getData(bedfile, mylist)
它应该像传递参数list
一样简单,所以
getData(bedfile, matrix1, ... , matrix2, ...)
将成为
getData(bedfile, [matrix1, matrix2], ....)
然后在getData
函数中,您可以将这些作为处理
x = {}
for matrix, start, end in zip(matrices, starts, ends):
x.update(createDictionary(bedfile, matrix, start, end, bedfilesep, matrixsep)
考虑将它们作为矩阵、开始和结束的三个单独列表,或这三个列表的元组三元组列表传入。然后使用for循环或列表理解来运行它们中的每一组。将*args**kwargs用于无序、异构的参数列表似乎并不理想。