鱼C论坛

 找回密码
 立即注册
查看: 26|回复: 3

[已解决]p.iterdir()生成器的问题

[复制链接]
发表于 昨天 12:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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()不会像之前生成器一样不走回头路?
最佳答案
昨天 12:05
`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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 昨天 12:05 | 显示全部楼层    本楼为最佳答案   
`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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 13:15 | 显示全部楼层
每次使用 .iterdir() 都会生成一个新的迭代器呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 16:23 | 显示全部楼层
isdkz 发表于 2025-1-9 13:15
每次使用 .iterdir() 都会生成一个新的迭代器呀

知道啦!感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-10 06:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表