Я пытаюсь использовать распаковку кортежа для пользовательской итерации. Размер итерации должен увеличиваться по мере ув ⇐ Python

Программы на Python
Anonymous
Я пытаюсь использовать распаковку кортежа для пользовательской итерации. Размер итерации должен увеличиваться по мере ув

Сообщение Anonymous »

Напишите класс 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(x, y, z) # 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 и использовать * в конце левой части.
class MyClass:
def init(self, n=100):
self.x = range(n)
def __iter__(self):
return iter(x)

x, y, *_ = MyClass()
x, y, z, *_ = MyClass()


Подробнее здесь: https://stackoverflow.com/questions/790 ... -size-shou

Вернуться в «Python»