功能仅在第一次调用时才正常工作
问题描述:
我有以下功能,第二个功能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')
而不是使用情况管理器,你也只是“手动”开放,并可以关闭该文件。 – syntonym
当然,但这依赖于您保持警惕并始终记得关闭它的事实。这就是为什么上下文管理者是一个非常好的构造,他们为你做这件事,让你担心更重要的事情:-)。 –
哇,超级有效,非常感谢。 –