我需要一些帮助来理解我想要使用的功能,但我不完全确定它的某些部分是做什么的。我知道该函数是从Fasta文件的读取创建字典。根据我的理解,这应该生成前缀和后缀词典,以最终扩展重叠群(重叠dna序列)。 代码:
def makeSuffixDict(reads, lenSuffix = 20, verbose = True):
lenKeys = len(reads[0]) - lenSuffix
dict = {}
multipleKeys = []
i = 1
for read in reads:
if read[0:lenKeys] in dict:
multipleKeys.append(read[0:lenKeys])
else:
dict[read[0:lenKeys]] = read[lenKeys:]
if verbose:
print("\rChecking suffix", i, "of", len(reads), end = "", flush = True)
i += 1
for key in set(multipleKeys):
del(dict[key])
if verbose:
print("\nCreated", len(dict), "suffixes with length", lenSuffix, \
"from", len(reads), "Reads. (", len(reads) - len(dict), \
"unambigous)")
return(dict)
其他信息:reads = readFasta("smallReads.fna", verbose = True)
这是函数的调用方式:
if __name__ == "__main__":
reads = readFasta("smallReads.fna", verbose = True)
suffixDicts = makeSuffixDicts(reads, 10)
smallReads.fna文件包含碱基字符串(Dna):
“>读取1
TTATGAATATTACGCAATGGACGTCCAAGGTACAGCGTATTTGTACGCTA
“>读取2
AACTGCTATCTTTCTTGTCCACTCGAAAATCCATAACGTAGCCCATAACG
“>阅读3
TCAGTTATCCTATATACTGGATCCCGACTTTAATCGGCGTCGGAATTACT
以下是我不理解的部分:
lenKeys = len(reads[0]) - lenSuffix
值[0]是什么意思?据我所知,“len”返回列表中的元素数量。 为什么“自动”读取列表?编辑:似乎Fasta文件可以声明为List。任何人都可以证实吗?
if read[0:lenKeys] in dict:
这是否意味着“从0到'lenKeys'”?仍然对价值感到困惑。
在另一个函数中有一个类似的行:if read[-lenKeys:] in dict:
“ - ”做什么?
def makeSuffixDict(reads, lenSuffix = 20, verbose = True):
这里我不明白参数:reads
如何成为参数?除了从lenSuffix = 20
中减去的值之外,此函数上下文中的len(reads[0])
是什么?
什么是冗长的?我已经阅读过关于“verbose-mode”忽略空格的内容,但我从未将其用作参数,后来又用作变量。
答案 0 :(得分:3)
你问题的语气让我觉得你把程序功能(len
,函数等)与原始程序员定义的东西(reads
的类型混淆, verbose
等。)
def some_function(these, are, arbitrary, parameters):
pass
此函数定义了一堆参数。它们根本不是意味着任何东西,除了我隐含给它们的价值。例如,如果我这样做:
def reverse_string(s):
pass
s
可能是一个字符串,对吗?在您的示例中,我们有:
def makeSuffixDict(reads, lenSuffix = 20, verbose = True):
lenKeys = len(reads[0]) - lenSuffix
...
从这两行我们可以推断出一些事情:
lenSuffix
是int
,verbose
是bool
(来自默认参数)reads
可以编入索引(string?list?tuple?)reads
内的项目有长度(字符串?列表?元组?)由于Python是动态类型的,因此到目前为止,这是关于该函数的所有我们都知道。其余的将通过其文档或其调用方式来解释。
那就是说:让我按顺序覆盖你所有的问题:
管理
some_object[0]
正在抓取容器中的第一项。[1,2,3][0] == 1
,"Hello, World!"[0] == "H"
。这称为索引,由__getitem__
魔法
len
是一个内置函数,它返回一个对象的长度。它由__len__
魔法控制。len('abc') == 3
,也是len([1, 2, 3]) == 3
。请注意len(['abc']) == 1
,因为它正在测量列表的长度,而不是其中的字符串。
reads
是一个参数。它是调用范围传递给它的任何东西。它似乎确实期望一个列表,但这不是一个严格的规则!
切片正在进行
some_container[start_idx : end_idx [ : step_size]]
。它完全符合您的期望:"0123456"[0:3] == "012"
。切片索引被认为是零索引并且在元素之间放置,因此[0:1]
与[0]
相同,除了切片返回列表,不是单个对象(所以'abc'[0] == 'a'
而是'abc'[0:1] == ['a']
)。如果省略开始或结束索引,则将其分别视为字符串的开头或结尾。我不会在这里进步。负指数从后面开始计算,因此
'0123456'[-3:] == '456'. Note that
[ - 0]is not the last value,
[ - 1]is. This is contrasted with
[0]`是第一个值。
因为该函数定义为
makeSuffixDict(reads, ...)
。这就是参数 。
看起来它是预期后缀的长度!
verbose
?
verbose
本身没有任何意义。这只是另一个参数。看起来作者包含了verbose
标志,因此您可以在函数运行时获得输出。请注意,所有if verbose
块似乎都没有做,只是向用户提供反馈。