Python-if语句中的变量范围-以下代码为何起作用?

时间:2019-03-09 18:03:12

标签: python variables scope

我正在上一门在线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中工作?

1 个答案:

答案 0 :(得分:0)

从读取数据格式看,似乎首先要读取if语句,从而用name初始化words[0][1:]。以下所有语句都是有效的,因为name已经存在。