Форум сайта python.su
0
Уважаемое сообщество, подскажите пожалуйста каким образом происходит обработка инструкции for.
Ближе к сути, интересует интерпритация следующего кода:
x = “123”
for x in x:
print x
Вывод результата будет таким:
1
2
3
То есть инструкция for, перед тем как выполнить первую итерацию цикла, запоминает где-то в промежуточной переменной значение перемнной х = “123”, ведь после первой итерации значение переменной х ровно 1 и вывод должен быть таким:
1
1
1
Подскажите пожалуйста, где в рассуждениях ошибка.
Спасибо.
Офлайн
14
Код надо оборачивать в теги code.
JuneСкорее всего ты правильно рассуждаешь.
То есть инструкция for, перед тем как выполнить первую итерацию цикла, запоминает где-то в промежуточной переменной значение перемнной х = “123”, ведь после первой итерации значение переменной х ровно 1 и вывод должен быть таким:
Офлайн
857
python.org. for
сначала вызывается iter() для x после in, затем для полученного таким образом итератора вызывается next() и результат связывается с именем x, затем выполняется тело цикла, затем снова вызывается next() для того же итератора
Отредактировано py.user.next (Окт. 3, 2012 01:34:37)
Офлайн
14
А что делает iter()? str не имеет __iter__().
Офлайн
14
Есть __getitem__, этого достаточно.
iter() возвращает итератор, естественно.
Офлайн
14
Андрей СветловЯ исходил из того, что iter() всего лишь обертка над __iter__()
iter() возвращает итератор, естественно.
Офлайн
20
А не проще (или по крайней мере быстрее) в доки заглянуть?
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.
Офлайн
14
Нуднее. Сидишь, как ботан, доки на англицком читаешь.
Офлайн
857
odnochlenв третьем нормально
str не имеет __iter__().
>>> '__iter__' in dir('') True >>> '__iter__' in dir(b'') True >>>
Офлайн
0
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.
Офлайн