生成器函数和生成器对象有什么区别
What is the difference between Generator-Function and Generator-Object
在此代码中,我们必须使用 a = MyGen()
才能使用 next(a)
。
如果我们只使用 print (next(MyGen()))
输出将始终是第一个产量。
def MyGen():
n=1
print('first')
yield n
n+=1
print('second')
yield n
n+=1
print('last')
yield n
a = MyGen()
print(next(a))
print(next(a))
print(next(MyGen()))
print(next(MyGen()))
输出:
first
1
second
2
first
1
first
1
生成器函数和生成器对象有什么区别?
以及导致此问题的生成器对象(如 a)中存储的内容?
谢谢。
类似于class vs实例:
MyGen()
有点像 class,每次调用它都会创建一个新对象,从方法的开头开始。这就是每次调用 next(MyGen())
时都会得到 first
的原因——因为它们中的每一个都是一个单独的、未命名的生成器对象。
当您将 MyGen()
分配给某个变量时,例如 a
您保留了对一个特定对象的引用,并且您可以继续对该对象调用 next(a)
以继续从上一个 yield 执行到下一个.
在此代码中,我们必须使用 a = MyGen()
才能使用 next(a)
。
如果我们只使用 print (next(MyGen()))
输出将始终是第一个产量。
def MyGen():
n=1
print('first')
yield n
n+=1
print('second')
yield n
n+=1
print('last')
yield n
a = MyGen()
print(next(a))
print(next(a))
print(next(MyGen()))
print(next(MyGen()))
输出:
first
1
second
2
first
1
first
1
生成器函数和生成器对象有什么区别?
以及导致此问题的生成器对象(如 a)中存储的内容?
谢谢。
类似于class vs实例:
MyGen()
有点像 class,每次调用它都会创建一个新对象,从方法的开头开始。这就是每次调用 next(MyGen())
时都会得到 first
的原因——因为它们中的每一个都是一个单独的、未命名的生成器对象。
当您将 MyGen()
分配给某个变量时,例如 a
您保留了对一个特定对象的引用,并且您可以继续对该对象调用 next(a)
以继续从上一个 yield 执行到下一个.