我想知道在另一个函数中使用函数时是否可以避免使用相同的参数。我会给你一段代码来清楚地说明:
def calculateQC(self,dic_symbols:dict) -> float:
str_quality = self.quality
length_seq = len(str_quality)
num_qc = 0
for symbol in str_quality:
num_value = dic_symbols[symbol]
num_qc += num_value
mean_qc = num_qc/length_seq
return(mean_qc)
def FastqtoFasta(self,min_qual:int,dic_symbols:dict) -> FastaFile:
header,sequence,qualc = self.info,self.seq,self.quality
qualc = self.calculateQC(dic_symbols)
if qualc >= min_qual:
print(">%s\n%s" %(header,sequence))
如您所见,函数 FastqtoFasta 包含另一个名为calculateQC 的函数,该函数需要一个字典作为参数。因此,我还必须向 FastqtoFasta 提供字典才能解决这个问题,否则我将无法使用calculateQC(错误)。
是否有更直接的解决方案,或者这只是唯一的方法?
谢谢。
如果您希望在函数堆栈中松散地共享参数,建议通过
**kwargs
(字典)传递参数。
def calculateQC(self, **kwargs) -> float:
dic_symbols = kwargs.get('symbols')
## do stuff
def FastqtoFasta(self, **kwargs) -> FastaFile:
min_qual = kwargs['min']
qualc = self.calculateQC(**kwargs)
## do stuff
调用该函数:
myObj.FastqtoFasta( min=#, symbols= {...})