yuan生的小小白
2022-03-01 09:37
采纳率: 100%
浏览 31

Python中为什么将函数赋给变量以后具体实现的效果会不一样?

我在学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

我想要达到的结果

请问为什么使用生成器赋值后的变量可以成功迭代,而直接使用生成器却不可以,而且为什么明明是生成器直接赋值的变量,他们的地址值却不相同,谢谢

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题