我正在上一门在线Python课程,在一次讲座中,我们编写了一个程序,该程序从文件中读取dna序列并将其放入字典中。正在读取的文件具有以下格式
>header1
dna sequence 1
>header2
dna sequence 2
>header3
dna sequence 3
...
示例文件为
>seq1
aaacgtgtgccccgatagttgtgtcagt
>seq2
acccgtgcacacagtgccaaggggatat
atagatatc
>seq3
agctcgatcgatcgattttagcgagagg
gagagacttcgatcgatcgagtcgatcg
a
这是程序:
try:
f = open("fasta.txt")
except IOError:
print("Coulnd't open file")
seqs = {}
for line in f:
line = line.rstrip()
if (line[0] == ">"):
words = line.split()
name = words[0][1:]
seqs[name] = ''
else:
seqs[name] = seqs[name] + line
f.close()
print(seqs['seq5'])
我的问题是,为什么该程序有效?据我对编程语言的了解,变量在定义它们的块中具有作用域。在程序中,变量name
在程序的“ if”部分中定义,但随后在程序的“ else”部分中引用。但是,程序进入程序“其他”部分的唯一方法是不输入“ if”部分,因此不会遇到变量name
。因此,在我看来,该程序不起作用。但这是出于某种原因。
所以我想问,为什么它起作用。变量作用域如何在Python中工作?
答案 0 :(得分:0)
从读取数据格式看,似乎首先要读取if语句,从而用name
初始化words[0][1:]
。以下所有语句都是有效的,因为name
已经存在。