【发布时间】:2019-09-09 00:57:22
【问题描述】:
我想实现一个递归函数,它将文件作为输入并处理行。当满足条件或我在文件末尾时,递归停止。
问题是我找不到检查我是否在文件末尾的方法。
例如,如果您到达文件末尾,以下代码将不会停止寻找线路会议condition。
def f_rec(file):
line=file.readline()
if not condition(line): # or file end
return f_rec(file)
else:
return line
我很高兴使用文件对象以外的其他数据结构,但它必须懒惰地读取文件。我不想使用 for 循环,因为我喜欢函数式编程。我的文件中可能有空行。
编辑:
澄清一下:
这不是任何询问如何检查您是否在文件末尾的问题的重复。我很清楚你可以这样做:
for line in file:
if condition(line):
return line
我真正想知道的是,是否有一种方法可以将递归函数应用于文件,而文件仍然被延迟读取。
【问题讨论】:
-
如果你不使用递归,你会怎么做?
-
抱歉没收到问题?我会使用 for 循环,但正如我所说,我不想这样做(不是因为它是一个学者练习,而是因为我想用递归来实现它的实际算法更简洁)
-
只循环文件对象:
for line info file:不要使用递归。在 Python 中效率特别低,在开始请求堆栈溢出之前,您只能获得大约 1000 的深度 -
@geckos 答案是正确的。您必须检查行中的空字符串才能知道您已达到 EOF
-
公平地说,没有答案实际上是递归读取文件中的行,但效率可能很低。
标签: python functional-programming