我在学Python生成器的时候遇到了一个问题,将一个生成器赋给变量以后调用next方法可以成功迭代,但是直接用生成器调用却一直返回初始值
问题相关代码
# 一个遍历1-100的生成器
def gen():
i = 1
while i <= 100:
yield i
i += 1
# 将生成器赋值给一个变量
g = gen()
# 分别输出他们的地址值
print(g)
print(gen())
# 使用赋值后的变量获取数据
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
# 直接使用生成器获取数据
print(gen().__next__())
print(gen().__next__())
print(gen().__next__())
print(gen().__next__())
print(gen().__next__())
运行结果及报错内容
变量输出的地址值:<generator object gen at 0x0000022BE138AF20>
生成器输出的地址值:<generator object gen at 0x0000022BE138A120>
使用赋值后的变量获取数据的结果:
1
2
3
4
5
直接使用生成器获取数据的结果:
1
1
1
1
1
我想要达到的结果
请问为什么使用生成器赋值后的变量可以成功迭代,而直接使用生成器却不可以,而且为什么明明是生成器直接赋值的变量,他们的地址值却不相同,谢谢