Я пытаюсь использовать распаковку кортежа для пользовательской итерации. Размер итерации должен увеличиваться по мере ув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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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