p.iterdir()生成器的问题
p.iterdir()<generator object Path.iterdir at 0x0000019B30B335E0>
for each in p.iterdir():
print(each)
C:\Users\AppData\Local\Programs\Python\Python312\1.txt
C:\Users\AppData\Local\Programs\Python\Python312\DLLs
C:\Users\AppData\Local\Programs\Python\Python312\Doc
C:\Users\AppData\Local\Programs\Python\Python312\include
但是为啥
next(p.iterdir())
WindowsPath('C:/Users/AppData/Local/Programs/Python/Python312/1.txt')
next(p.iterdir())
WindowsPath('C:/Users/AppData/Local/Programs/Python/Python312/1.txt')
用next()不会像之前生成器一样不走回头路? `p.iterdir()`返回的是一个生成器,每次调用都会返回一个新的生成器对象。生成器在第一次创建和使用时,会从路径中迭代返回所有内容。
在你的例子中,使用 `for each in p.iterdir():` 循环时,会创建一个生成器对象,并在循环中消耗掉这个生成器的所有元素。
但是,使用 `next(p.iterdir())` 时,每次调用 `p.iterdir()` 都会创建一个新的生成器对象,这个新生成器对象的迭代是从头开始的。因此,连续调用 `next(p.iterdir())` 时,每次都会从生成器的开头开始返回第一个元素,而不是接着上次的地方。
如果你想使用 `next()` 来依次获取内容,应该先将生成器分配给一个变量,比如:
it = p.iterdir()
print(next(it))
print(next(it))
这样 `it` 就是同一个生成器,`next()` 调用才会接着上次的位置继续迭代。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 每次使用 .iterdir() 都会生成一个新的迭代器呀 isdkz 发表于 2025-1-9 13:15
每次使用 .iterdir() 都会生成一个新的迭代器呀
知道啦!感谢
页:
[1]