Относительно 2.
На самом деле мы должны различать два случая.
Помните, что писал Грег Хьюгилл:
«Итератор» - это один объект, который отвечает
для создания некоторой последовательности элементов.
Эта последовательность может быть элементами существующего списка,
или это может быть что-то рассчитано, как простые числа
или десятичные цифры π.
Первый случай :
итератор вычисляет объект, который он должен произвести при стимуляции; то есть произведенный объект не существовал до вызова next()
. Следовательно, если объекту присвоено имя, этот последний выживет; в противном случае объект будет существовать без привязки к имени в пространстве имен в течение определенного времени, а затем он исчезнет в памяти, то есть занимаемые им биты будут использованы для другого объекта позже или раньше.
Второй корпус
- это когда итератор возвращает ранее существующие объекты, принадлежащие списку, кортежу, словарю и т. Д. В этом случае каждый объект, созданный next()
, уже имеет привязку с именем. Затем, если объекту присваивается новое имя, когда он «выскакивает» из итератора, к объекту будут привязаны два имени. И если объекту не присвоено имя, он будет по-прежнему привязываться только к одному имени, чего достаточно для поддержания объекта в живых.
Общее:
Каждый раз, когда объект создается по вызову итератора, если ему не назначено имя, единственным результатом операции является то, что итератор "использовался". Это способ сказать, что даже если после создания объекта нет постоянных последствий, оно произошло, что пропустило след внутри итератора.
Говорят о потреблении итератора, когда объекту присваивается имя, однако я не хочу путать.
Примечание:
На самом деле, в случае, если объект уже существует в списке, скажем, возможно, у него нет имени. Но список содержит ссылку на каждый объект, который он «содержит» ... На самом деле, список не «содержит» объекты, а только ссылки на объекты ... Это выходит за рамки того, что я хотел сказать.
.
Относительно 3
Вы не должны писать 3: "Когда переменной назначается ..."
Слово variable является ловушкой в Python, поскольку оно имеет неоднозначное значение. В Python нет переменных , в общем смысле, известном в других языках, то есть «разделенная часть памяти, значение которой может измениться». Есть только объекты. Слово переменная обычно используется для обозначения идентификатора . Поэтому лучше называть это идентификатор или имя . Это позволяет избежать путаницы.
.
Относительно 4
Я не думаю, что можно получить два возврата от итератора только одним вызовом next()