Найти - Пользователи
Полная версия: Цикл for
Начало » Python для новичков » Цикл for
1 2
June
Уважаемое сообщество, подскажите пожалуйста каким образом происходит обработка инструкции for.
Ближе к сути, интересует интерпритация следующего кода:
x = “123”
for x in x:
print x

Вывод результата будет таким:
1
2
3

То есть инструкция for, перед тем как выполнить первую итерацию цикла, запоминает где-то в промежуточной переменной значение перемнной х = “123”, ведь после первой итерации значение переменной х ровно 1 и вывод должен быть таким:
1
1
1

Подскажите пожалуйста, где в рассуждениях ошибка.
Спасибо.
odnochlen
Код надо оборачивать в теги code.

June
То есть инструкция for, перед тем как выполнить первую итерацию цикла, запоминает где-то в промежуточной переменной значение перемнной х = “123”, ведь после первой итерации значение переменной х ровно 1 и вывод должен быть таким:
Скорее всего ты правильно рассуждаешь.

py.user.next
python.org. for
сначала вызывается iter() для x после in, затем для полученного таким образом итератора вызывается next() и результат связывается с именем x, затем выполняется тело цикла, затем снова вызывается next() для того же итератора
odnochlen
А что делает iter()? str не имеет __iter__().
Андрей Светлов

Есть __getitem__, этого достаточно.

iter() возвращает итератор, естественно.

odnochlen
Андрей Светлов
iter() возвращает итератор, естественно.
Я исходил из того, что iter() всего лишь обертка над __iter__()
EBFE
А не проще (или по крайней мере быстрее) в доки заглянуть?
http://docs.python.org/library/functions.html#iter
Return an iterator object. The first argument is interpreted very differently depending on the presence of the second argument. Without a second argument, o must be a collection object which supports the iteration protocol (the __iter__() method), or it must support the sequence protocol (the __getitem__() method with integer arguments starting at 0). If it does not support either of those protocols, TypeError is raised.
odnochlen
Нуднее. Сидишь, как ботан, доки на англицком читаешь.
py.user.next
odnochlen
str не имеет __iter__().
в третьем нормально
>>> '__iter__' in dir('')
True
>>> '__iter__' in dir(b'')
True
>>>
June
EBFE
А не проще (или по крайней мере быстрее) в доки заглянуть?
http://docs.python.org/library/functions.html#iter
Return an iterator object. The first argument is interpreted very differently depending on the presence of the second argument. Without a second argument, o must be a collection object which supports the iteration protocol (the __iter__() method), or it must support the sequence protocol (the __getitem__() method with integer arguments starting at 0). If it does not support either of those protocols, TypeError is raised.

Проще, если знаешь что искать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB