Py学习  »  Python

Python-if语句中变量的作用域-为什么下面的代码有效?[副本]

Zuhaib Ahmed • 4 年前 • 239 次点击  

我正在上一门在线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中,变量作用域是如何工作的?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54949
 
239 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Alan Williams
Reply   •   1 楼
Alan Williams    5 年前

从读取数据格式来看,if语句将首先被读取,因此初始化 name 具有 words[0][1:] . 以下所有语句都将有效,因为 名称 已经存在。