Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 13, 2017 17:51:33

ron_1
Зарегистрирован: 2017-10-12
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Итератор, итерируемый объект и прочие.

py.user.next
То что я написал насчёт классов и всё что с ними связано является моим несистиматизированным опытом в этом языке и он не был получен благодаря этой книги. Я написал “не изучал” так как не изучал функции в книге, но я могу дать вам полный ответ в отношении их основанный на моём личном опыте и дурацких курсов. Дальше, я заметил что вы продиктовали слишком много терминов следующих после 417 страницы и решил писать всё что знаю.

Офлайн

#2 Окт. 13, 2017 20:59:13

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2683
Репутация: +  182  -
Профиль   Отправить e-mail  

Итератор, итерируемый объект и прочие.

Да забей ты на итераторы. Когда надо будет разберёшся.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Окт. 14, 2017 01:56:56

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Итератор, итерируемый объект и прочие.

ron_1
Я написал “не изучал” так как не изучал функции в книге, но я могу дать вам полный ответ в отношении их основанный на моём личном опыте и дурацких курсов.
Тебе нужно изучить основы программирования - самого обычного программирования без всякого питона. Сейчас много курсов есть (и письменных, и видео), где рассказывается о переменных, функциях, конструкциях и алгоритмах в любых языках. Например, ты знаешь, что такое оператор в программе?
Теперь понятно, почему ты не понял моё первое сообщение: я думал, ты знаешь основы программирования. А так, получается, что ты не знаешь основ, но лезешь в слишком сложный и специфичный для конкретного языка программирования материал, который без основ понять невозможно. Что такое объект? Ты не можешь понять это, потому что основ не знаешь. Ты говоришь “объект - это экземпляр, а экземпляр - это объект”.
У тебя информатика в школе была? Обычно это всё там выдают с использованием псевдокода: понятие алгоритма, понятие исходного кода программы, операторов и всего остального.



Отредактировано py.user.next (Окт. 14, 2017 02:02:45)

Офлайн

#4 Окт. 14, 2017 15:42:20

ron_1
Зарегистрирован: 2017-10-12
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Итератор, итерируемый объект и прочие.

Rodegast
Да, так и сделал. Пропустил эту главу.

Офлайн

#5 Окт. 14, 2017 15:56:31

ron_1
Зарегистрирован: 2017-10-12
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Итератор, итерируемый объект и прочие.

py.user.next
Я просмотрел несколько обучающих видео уроков по основам программирования. Единственное что для себя открыл нового это термин “Структура данных” (я знал, что это такое, но не знал как называется) . А насчёт текста: я так написал из-за того что писал очень быстро т.к спешил, надо было отойти по собственным делам. В спешке пришла первая ассоциация объекта - экземпляр класса. Сейчас я попытаюсь вам изложить свои знания объекта: Объект - это отдельный тип данных который имеет специфические атрибуты, так же объект может ориентироваться в среде благодаря полиморфизму, а точнее с помощью перегрузки операторов, объект - это основа любого языка программирования, принцип типизаций строится на объектах и их поведениях, объект это “представитель” информации в программировании. В том сообщении изложены не все мои знания, а всего лишь их малейшая часть.

Отредактировано ron_1 (Окт. 14, 2017 18:41:42)

Офлайн

#6 Окт. 14, 2017 18:34:55

ron_1
Зарегистрирован: 2017-10-12
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Итератор, итерируемый объект и прочие.

Сейчас достаточно попрактиковался на итераторах и классах и возник ещё один вопрос: Зачем создавать итератор из итерируемого объекта когда можно напрямую вызывать функцию next(Итерируемый объект)? И тут какая то хрень начинается: объекты встроенных типов данных (списки, строки) не могут быть аргументом в next() без явного преобразования в итератор, а вот собственные (созданные мною) объекты могут

 class MyClass:
    def __init__(self):
        self.x = [1, 2, 3, 4]
        self.num = 0
    def __iter__(self):
        return self
    def __next__(self):
        self.num += 1
        return self.x[self.num]
x = MyClass()
print(next(x)); print(next(x)); print(next(x));

Но:
 x1 = [1, 2, 3]
# А вот тут
# print(next(x)) Выведет ошибку - ПОЧЕМУ?
my_iter = iter(x1)
print(next(my_iter)); print(next(my_iter))
# Без итератора не работает

создаётся ложное ощущение, что запутались сами разработчики языка

Офлайн

#7 Окт. 16, 2017 02:22:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Итератор, итерируемый объект и прочие.

ron_1
Зачем создавать итератор из итерируемого объекта когда можно напрямую вызывать функцию next(Итерируемый объект)?
Невнимательно читаешь ещё. Итерируемый объект - это не итератор. Итерируемый объект - это iterable, про который я писал в первом ответе этого топика. Раз уж ты не знаешь нифига, то итерируемый объект - это такой объект, у которого можно получить итератор. Список, например, является итерируемым объектом, но не является итератором. У него есть метод __iter__(), поэтому к нему можно применить функцию iter(); а функция iter() уже вернёт итератор, который будет получен из встроенного метода __iter__(). Внутри встроенного метода __iter__() этот итератор будет построен по внутренним (скрытым) правилам. Пойми одну вещь: список и итератор по этому списку - это два абсолютно разных объекта.

Вот смотри: список один, а независимых друг от друга итераторов на нём может быть несколько.
  
>>> lst = [1, 2, 3]
>>> 
>>> it1 = iter(lst)
>>> it2 = iter(lst)
>>> it3 = iter(lst)
>>> 
>>> id(lst), id(it1), id(it2), id(it3)
(140567794603848, 140567794681000, 140567794681112, 140567794681224)
>>> 
>>> next(it1)
1
>>> next(it1)
2
>>> next(it2)
1
>>> next(it1)
3
>>> next(it2)
2
>>> next(it3)
1
>>>

  
>>> 
>>> lst.append(4)
>>> 
>>> next(it1)
4
>>> next(it2)
3
>>> next(it2)
4
>>> 



Отредактировано py.user.next (Окт. 16, 2017 02:36:58)

Офлайн

#8 Ноя. 20, 2017 20:07:24

ron_1
Зарегистрирован: 2017-10-12
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Итератор, итерируемый объект и прочие.

py.user.next
Сейчас, я полностью разобрался со всеми этими танцами вызова дождя и заметил что вы всё таки кое-что недосказали.
Реализация ООП в классах часто связана с утиной типизацией и поэтому иногда приходится имитировать поведение итерируемых объектов. Но в типе списков всё это реализовывалось по другому, там iter() возвращал уже сам объект итератора экземпляра, а не объект экземпляра.

 class my:
    def __init__(self):
        self.a = [1, 2, 3]
    def __iter__(self):
        self.n = 0
        return self
    def __next__(self):
        self.n += 1
        return self.a[self.n]
g = my()
print(g is iter(g))
n = [5, 10]
print(n is iter(n))

Вывод:
True
False

Поэтому я не понимал принцип построения итераторов и путался. Так же нету чёткой грани между итератором и итерируемым объектом (слова лутца). В пользовательских классах iter(экземпляр) возвращает сам экземпляр и сделано это всё формально ( для инструментов поддерживающих протокол итерации: циклы, map). То есть просто имитация поведения встроенного типа. А вот в самих встроенных типах уже проходит линия между итератором и итерируемым объектом (экземпляром).

Это и было мне трудно понять. Всё равно, Спасибо, за вашу помощь в этой неразберихе, можете не отвечать на это сообщение.

P.S по сути, итератор тоже является итерируемым объектом.

Офлайн

#9 Ноя. 20, 2017 20:33:29

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2683
Репутация: +  182  -
Профиль   Отправить e-mail  

Итератор, итерируемый объект и прочие.

> Сейчас, я полностью разобрался со всеми этими … В пользовательских классах iter(экземпляр) возвращает сам экземпляр

Ну тогда вот тебе дополнительная информация для размышления

 >>> a = [1, 2, 3]
>>> class my(object):
...     def __iter__(self):
...         return iter(a)
>>> g = my()
>>> g is iter(g)
False
>>> for x in g:
...    x
1
2
3



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#10 Ноя. 20, 2017 20:41:22

ron_1
Зарегистрирован: 2017-10-12
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Итератор, итерируемый объект и прочие.

Rodegast
Дядя петя… Это уже древнегреческий пайтон, тут вторая ветка со своим старым стилем классов, где класс - это класс, а не тип. Да и у вас там как бы возврат итератора списка идёт, а не итератора пользовательского класса. Это какой-то новый паттерн делегирования?)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version