我试图理解下面注释掉的代码行。当行被注释掉时,程序按预期工作:它读取函数tuple_to_word创建一个字典,其中words.txt行作为值。
但是,当代码被取消注释时,程序只打印一个空字典。但我无法理解为什么for循环会对tuple_to_word的调用产生任何影响。我猜测有问题的for循环会改变底层文件对象,但是如何?
fin = open('words.txt')
word_dict = {}
'''
for i in fin:
word_dict[i.strip()] = 1
'''
def signature(s):
t = list(s)
t.sort()
t = ''.join(t)
return t
def tuple_to_word():
words_match_tuple = { }
for line in fin:
word = line.strip().lower()
t = signature(word)
words_match_tuple.setdefault(t, []).append(word)
return words_match_tuple
print tuple_to_word()
答案 0 :(得分:1)
答案是:如果激活'''..'''之间的代码,这将逐行解析输入文件。然后函数tuple_to_word()将在末尾找到文件光标,并且没有要从输入文件解析的行。
您应该重新打开输入文件或使用以下命令转到文件的开头
fin.seek(0)