gpt4 book ai didi

python - 在 python 中使用 for 循环遍历文本文件 - 为什么这有效?

转载 作者:行者123 更新时间:2023-11-30 21:53:53 31 4
gpt4 key购买 nike

我目前正在学习如何用 Python 创建拼写检查器。在一些教程中,我看到类似以下内容:


def ReadDictionaryFile(dictionaryfilename):
dictionarywords = [] # stores words in a list
inputfile = open(dictionaryfilename, "r")

for line in inputfile: # iterate over the lines of the file
word = line.strip() # whitespace removed
dictionarywords.append(word) # appends word to the list
inputfile.close()
return dictionarywords

但我不明白 python 如何知道将其分成几行。

for line in inputfile:中,“line”只是一个变量,那么代码的哪一部分实际上告诉它在\n处停止?

Python 中是否有一些内置功能,其中迭代文本的 for 循环在遇到\n 时才开始下一次迭代?我找不到任何相关信息...

感谢任何帮助!

最佳答案

这是有效的,因为 open 返回的文件对象在其特殊的“dunder”(双下划线)__iter__ 方法中实现了该行为。这是当您在 for 循环中隐式迭代对象时调用的方法。

例如,考虑以下代码:

class LineIterator:
def __init__(self, contents):
self.contents = contents

def __iter__(self):
yield from self.contents.splitlines()


it = LineIterator("""Hello
Foobar
Goodbye""")

for line in it:
print("The line was", repr(line))

打印出来

The line was 'Hello'
The line was 'Foobar'
The line was 'Goodbye'

那个 for 循环与显式版本完全相同:

for line in iter(it):
print("The line was", repr(line))

或者真正非常明确的版本:

for line in it.__iter__():
print("The line was", repr(line))

原始版本以及使用iter(it)的版本,只需调用__iter__方法。标准库广泛使用此模式,您可以在自己的代码中使用它来使对象按预期运行。

(yield from x 基本上意味着“将每个元素 x 传递到循环”。)

关于python - 在 python 中使用 for 循环遍历文本文件 - 为什么这有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59491643/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com