功能仅在第一次调用时才正常工作

问题描述:

我有以下功能,第二个功能count_forbid(a)只能工作1次。在这个例子中,它计算了不包含字母'c'的单词的正确值,但是对于y它返回零。因此,这意味着代码只能做正确的第一次和所有其他的时间就返回零:功能仅在第一次调用时才正常工作

import string 
fin = open('words.txt') 
def forbid_or_not(word,forb): 
    for letter in word: 
     if letter in forb: 
      return False 
    return True 

def count_forbid(a): 
    count = 0 
    for line in fin: 
     word1 = line.strip() 
     if forbid_or_not(word1,a): 
      count += 1 
    return count 

x = count_forbid('c') 
y = count_forbid('d') 

后您通过与文件迭代:

for line in fin: 

这是要到达终点并试图重新执行将不起作用。

要么改变功能使用context manager是重新打开该文件时被调用的函数:

def count_forbid(a): 
    count = 0 
    with open('words.txt') as fin: # closes the file automatically 
     for line in fin: 
      word1 = line.strip() 
      if forbid_or_not(word1,a): 
       count += 1 
    return count 

在Python里打开文件的首选方式。

或者,添加您的通话之间fin.seek(0),以获取该文件指向开头:

x = count_forbid('c') 
fin.seek(0) 
y = count_forbid('d') 
+0

而不是使用情况管理器,你也只是“手动”开放,并可以关闭该文件。 – syntonym

+1

当然,但这依赖于您保持警惕并始终记得关闭它的事实。这就是为什么上下文管理者是一个非常好的构造,他们为你做这件事,让你担心更重要的事情:-)。 –

+0

哇,超级有效,非常感谢。 –