belgium fries

Старость

Младенец, как все люди младше сорока лет, стал огромным энтузиастом питона. Предлагает теперь все время почитать для развлечения код, а я ничего не понимаю, даже цикл for.
Вот если мы пишем for i in range (0, 2**31, 1): print i, он внутри аллокирует четыре гигабайта, или не обязательно?
Как можно настолько сложный язык использовать для обучения?
В этот момент старые люди восклицают RTFM! :)
The advantage of the range type over a regular list or tuple is that a range object will always take the same (small) amount of memory, no matter the size of the range it represents (as it only stores the start, stop and step values, calculating individual items and subranges as needed).
Почему же балаган? Даже в Ц++ давно сделали: for(a : b) ...
Во всех языках есть for и foreach, но они легко отличаются друг от друга и не требуют для осмысления ленивого оператора[ ] и подобной экзотики. Я не против любых странностей, но использовать такое в преподавании?..
Я слышал разные мнения почему тот или иной язык хорош/плох для преподавания. Если бы меня поставили перед выбором, то я бы скорее всего на С преподавал, т.к. в нём, типа, WYSIWYG такой. Что пишем, то и происходит. Но доводилось видеть толковых людей у которых первый язык был какой-нибудь скрипт или Джава. Думаю что влияние языка в преподавании преувеличено из-за холиваров вокруг этой темы.

Edited at 2017-08-24 12:53 pm (UTC)
Так это bias в сторону выживания, как учит дедушка Талеб.
Дедушка Талеб хитрый. Сам пишет книжки и разъезжает по миру, учит всех уму разуму, а у нас уже седые волосы в голове, и всё программируем. Эх...
В преподовании плохо обычно ориентироваться на толковых - те и так поймут (или их надо учить уже другому)
А зачем учить бестолковых программированию?
Бестолковых учить тоже без толку. Все усилия обычно на тех четверочников. С другой стороны, в науке и они не нужны, а вот в промышленных областях, самое то. У меня зять тут изучал программирование с дважаскрипта. Забавные у него представления как все работает, мистические какие-то.
ржу в голос очень понимаю...
а у младенцев по другому мозг с рождения работает
Внезапно попал в число людей старше сорока лет. )
Там просто for делает не то, что ты думаешь.

>>> x = range(1, 5)
>>> y = [1, 2, 3, 4, 5]
>>> x
range(1, 5)
>>> y
[1, 2, 3, 4, 5]
>>> x.__iter__()
<range_iterator object at 0x10703b5a0>
>>> x.__iter__().__next__()
1
>>> y.__iter__()
<list_iterator object at 0x1071e8d68>
>>> y.__iter__().__next__()
1
>>> 


Использовать для обучения нельзя, да.

Edited at 2017-08-29 02:13 pm (UTC)
Я и говорю, когда for делает не то, что я думаю, это звоночек.
На этот вопрос надлежит отвечать конкретно-исторически. В питонах до третьего (до 2.7 включительно, который до сих пор много где используется) именно что аллоцирует четыре гигабайта (на самом деле ещё больше, на служебные всякие вещи). Поскольку это было жутко неудобно (чаще всего range использовалось в связке с for), придумали xrange, которая выдаёт "магический" объект специально для итераций.

В третьем питоне сломали совместимость, переименовав xrange в range. Если хочется получить старый range в третьем питоне, пишем list(range(10)). И да, так всегда бывает, когда язык с простой и интуитивной семантикой, рассчитанной на обучение, сталкивается с суровой реальностью и потребностями не учащихся, но выучившихся. "Ну мы то уже знаем язык, мы на нём реальный код пишем, нам нетрудно исключение запомнить". :-(

... Горький твёрдый палладийский шоколад ...