# 一个遍历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
请问为什么使用生成器赋值后的变量可以成功迭代,而直接使用生成器却不可以,而且为什么明明是生成器直接赋值的变量,他们的地址值却不相同,谢谢
我觉得是每直接调用一次
gen().__next__()
其实就是从生成器入口,开始遍历生成器。
print(id(g.__next__()))
print(id(g.__next__()))
print(id(g.__next__()))
print(id(gen().__next__()))
print(id(gen().__next__()))
print(id(gen().__next__()))