ru_python_beginners | Unsorted

Telegram-канал ru_python_beginners - Python beginners

14446

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Правила группы: https://t.me/ru_python_beginners/1649981

Subscribe to a channel

Python beginners

Не надо так делать. Итератор должен в своём __iter__ возвращать самого себя

Читать полностью…

Python beginners

ты в моем примере кода спрашиваешь какой смысл у атрибута Index?

Читать полностью…

Python beginners

Не стоит делать саму коллекцию итератором. Это вводит в заблуждение. (если коллекция используется не как итератор, то какой смысл несёт атрибут index?)
Если хочется сделать объект итерируемым, обычно можно использовать генератор в качестве итератора:

class XsAndYs:
def __init__(self, xs, ys):
self.xs = xs
self.ys = ys

def __iter__(self):
yield from self.xs
yield from self.ys

Читать полностью…

Python beginners

Такой вопрос, насколько мне известно итератор у встроенных коллекций реализуется так:
- Допустим это list. Вызывая iter([1,2,3]), аргумент попадает в дандер итер самого класса list у которого под капотом Сpython делается - return list_iterator([1,2,3])

и уже iter класса list_iterator создает возвращает нам объект итератор.

Т.е класс list передает логику создания объекта итератора классу list_iterator


Теперь допустим я хочу создать свой класс, который должен уметь итерировать переданную в него коллекцию чуть по-другому(не важно как, просто чтобы аргументировать причину создания своей логики того, как нужно итерировать).

И вот в своем классе я пишу iter и next и вот мне лень передавать создание нового объекта итератора другому самописному классу - итератор, не хочу я его создавать и делаю внутри этого же своего класса iter(): return Мойкласс([1,2,3]) . Т.е внутри моего же класса реализую создание объекта итератора.


class MyIter:
def __init__(self, items):
self.items = items
self.index = 0

def __iter__(self):
return MyIter(self.items)

def __next__(self):
if self.index >= len(self.items):
raise StopIteration
value = self.items[self.index]
self.index += 2
return value


Это же будет точно так же работать ?

Читать полностью…

Python beginners

Ну условно в самом классе итераторе iter ретёрним self

А в пользовательском классе iter return class_iterator(самописный)_(obj)

Читать полностью…

Python beginners

класс в котором iter return self

Читать полностью…

Python beginners

ну если самописный класс итератор. То у него итер возвращает self, а уже в моем пользовательском классе итер возвращает самописный класс-генератор(список)

Читать полностью…

Python beginners

А как этого добиться?

Читать полностью…

Python beginners

(понапридумывали ненастоящих слов)

Читать полностью…

Python beginners

class Итератор:
def __getitem__(self, i):
if i == 0:
return 'раз'
elif i == 1:
return 'два'
elif i == 2:
return 'три'
raise IndexError

for a in Итератор():
print(a)

во

Читать полностью…

Python beginners

нет, он о том что у итератора должен быть реализован вот так:

def __iter__(self):
return self

Читать полностью…

Python beginners

Ну ладно, частично можно, но это не очень очевидно

Читать полностью…

Python beginners

Не, можешь в определении итератора в доке питона глянуть

Читать полностью…

Python beginners

Ну напутал немного, но в целом ок

Читать полностью…

Python beginners

Ну вообще у итератора кроме того что должен быть реализован __iter__ он еще должен иметь довольно конкретную реализацию

Читать полностью…

Python beginners

Эт я знаю, вопрос в том, есть ли разница между такой реализацией как у list, когда лист внутри себя создает экземляр класса list_iterator и когда класс внутри себя, создает экземляр самого себя, который тоже итератор.
По сути и первая и вторая реализация делают одно и тоже. только в первом случае это делает через посредника list_iterator а во втором случае экземпляр самого себя. И тот и другой вариант же рабочий. Но во втором случае нет необходимости создавать второй класс как list_iterator чтобы передавать ему создание экземпляра

Читать полностью…

Python beginners

Но если смысл объекта в том, что он итератор, то в нём и нужно сделать __iter__ и __next__. Только лучше сделать items внутренним атрибутом (self._items = items)

Читать полностью…

Python beginners

list_iterator — это уже итератор, у него __iter__ возвращает самого себя.

class list:
def __iter__(self):
return list_iteartor(...)

class list_iterator:
def __iter__(self):
return self

def __next__(self):
...

Читать полностью…

Python beginners

Я еще узнал, если я конечно правильно все понял, что взависимости от того, какой объект передан в next то под капотом Cpython вызывается сишный iternext для итератора и сишный send с по умолчанию none для генератора

Читать полностью…

Python beginners

кажется ты перепутал с итератором

Читать полностью…

Python beginners

что еще за класс-генератор?

Читать полностью…

Python beginners

Если у тебя условно самописные списки и самописные итераторы для них

Читать полностью…

Python beginners

выводить должен принт каждый элемент списка

Читать полностью…

Python beginners

даже не итератор, итерабл

Читать полностью…

Python beginners

сча как напишу итератор без итера

Читать полностью…

Python beginners

Если не хочешь сразу в доку глядеть можешь подумать что должно произойти когда мы делаем

lst = [1, 2, 3]
it = iter(lst)

for i in it:
print(i)

Читать полностью…

Python beginners

Это не что-то до чего можно дойти подумав

Читать полностью…

Python beginners

Ну ты в первой строке итерабл и итератор перепутал

Читать полностью…

Python beginners

ты про то, что например в классе dict должен вернуть class dict_iterator и аналогично в других классах ?

Читать полностью…

Python beginners

пора менять ник на Bunny L

Читать полностью…
Subscribe to a channel