June
Окт. 1, 2012 23:54:55
Уважаемое сообщество, подскажите пожалуйста каким образом происходит обработка инструкции for.
Ближе к сути, интересует интерпритация следующего кода:
x = “123”
for x in x:
print x
Вывод результата будет таким:
1
2
3
То есть инструкция for, перед тем как выполнить первую итерацию цикла, запоминает где-то в промежуточной переменной значение перемнной х = “123”, ведь после первой итерации значение переменной х ровно 1 и вывод должен быть таким:
1
1
1
Подскажите пожалуйста, где в рассуждениях ошибка.
Спасибо.
odnochlen
Окт. 2, 2012 01:35:10
Код надо оборачивать в теги code.
June
То есть инструкция for, перед тем как выполнить первую итерацию цикла, запоминает где-то в промежуточной переменной значение перемнной х = “123”, ведь после первой итерации значение переменной х ровно 1 и вывод должен быть таким:
Скорее всего ты правильно рассуждаешь.
py.user.next
Окт. 2, 2012 02:30:07
python.org. forсначала вызывается
iter() для
x после
in, затем для полученного таким образом итератора вызывается
next() и результат связывается с именем
x, затем выполняется тело цикла, затем снова вызывается
next() для того же итератора
odnochlen
Окт. 2, 2012 17:25:09
А что делает iter()? str не имеет __iter__().
Андрей Светлов
Окт. 2, 2012 19:34:19
Есть __getitem__, этого достаточно.
iter() возвращает итератор, естественно.
odnochlen
Окт. 2, 2012 19:56:28
Андрей Светлов
iter() возвращает итератор, естественно.
Я исходил из того, что iter() всего лишь обертка над __iter__()
EBFE
Окт. 2, 2012 23:15:33
А не проще (или по крайней мере быстрее) в доки заглянуть?
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
Окт. 3, 2012 00:34:30
Нуднее. Сидишь, как ботан, доки на англицком читаешь.
June
Окт. 3, 2012 15:19:48
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.
Проще, если знаешь что искать.