编写一个给出预期输出的Python类当前给出ValueError
#Can be modified. (Can even be a function or generator
class MyClass:
def init(self):
self.count = 0
def __iter__(self):
return self
def __next__(self):
self.count+=1
return self.count
#Cannot be modified Cannot pass arguments to MyClass constuctor
x, y = MyClass()
print(x, y) # Should return 1, 2
x, y, z= MyClass()
print(1, 2, 3) # 1, 2, 3
最接近的解决方法是将参数传递给构造函数
class MyClass:
def init(self, n):
self.x = range(n)
def __iter__(self):
return iter(x)
#Cannot be modified I want to avoid passing n
x, y = MyClass(2)
x, y, z= MyClass(3)
稍微更好的解决方法是使用非常大的默认 n 并在 lhs 末尾使用 *
class MyClass:
def init(self, n=100):
self.x = range(n)
def __iter__(self):
return iter(x)
x, y, *_ = MyClass()
x, y, z, *_ = MyClass()
迭代器无法“查询”赋值来找出需要多少个值。它将产生固定数量的值,或不确定数量的值,并且会发生以下两种情况之一:
*
元素,根据需要“吸收”尽可能多的值。)ValueError
。 (这包括使用无限迭代器,因为任何有限数量的目标最终都会耗尽。)