Python 调用iter上的下一个,有选择地调用任何文件句柄?

Python 调用iter上的下一个,有选择地调用任何文件句柄?,python,iterator,lazy-loading,file-handling,Python,Iterator,Lazy Loading,File Handling,我在path中有一个文件列表,我想在其中创建iter对象,这样我可以在所有文件打开时随时读取任何文件。路径中的文件数是动态的 filehandles = [] for filename in glob.glob(path): filehandles += [open(filename, 'r')] print(filehandles) 调用next()时,下面的代码抛出编译错误 ()缺少1个必需的位置参数:“filehandle” 如果我没有为lambda保留任何参数,它将为所有文件句

我在path中有一个文件列表,我想在其中创建iter对象,这样我可以在所有文件打开时随时读取任何文件。路径中的文件数是动态的

filehandles = []
for filename in glob.glob(path):
    filehandles += [open(filename, 'r')]
print(filehandles)
调用next()时,下面的代码抛出编译错误

()缺少1个必需的位置参数:“filehandle”

如果我没有为lambda保留任何参数,它将为所有文件句柄获取循环中的最后一个文件句柄


有人能帮助我们在所有打开的文件上创建iter并有选择地调用next吗?

文件对象已经是迭代器了。我不确定我是否理解您在示例代码末尾试图打印的内容,但您应该已经能够执行
print(next(filehandles[3])
(打印列表中第四个文件的下一行)

虽然这里可能没有必要,但如果您需要解决将来在循环中创建lambda函数的一般问题,通常的方法是向参数添加默认值:

functions = []
for x in lst:
    functions.append(lambda x=x: x.foo())

默认参数急切地绑定到函数对象,因此它保留了计算lambda表达式时
x
所具有的值。

thse 2行已解决=>myiter=iter(lambda:lambda filehandle:filehandle.readline(),“”)TopItemsFromEachFile=[next(myiter)(filehandles[i]),用于范围内的i(len(filehandles))]迭代器和高阶函数对我来说似乎完全无用。我很确定它相当于
[fh.readline()用于文件句柄中的fh]
。您很少需要用Python编写自己的迭代器,而且几乎不需要读取文件,因为它们已经是自己的迭代器了。
functions = []
for x in lst:
    functions.append(lambda x=x: x.foo())