我正在上一门在线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”部分引用。但是程序要进入程序的“else”部分的唯一方法是如果它不进入“if”部分,那么它就不会遇到变量
名称
. 所以在我看来,这个程序不应该运行。但这是有原因的。
所以我想问,为什么它是有效的。在Python中,变量作用域是如何工作的?