birdwatcher: (belgium fries)
birdwatcher ([personal profile] birdwatcher) wrote2017-08-24 05:46 am

Старость

Младенец, как все люди младше сорока лет, стал огромным энтузиастом питона. Предлагает теперь все время почитать для развлечения код, а я ничего не понимаю, даже цикл for.
Вот если мы пишем for i in range (0, 2**31, 1): print i, он внутри аллокирует четыре гигабайта, или не обязательно?
Как можно настолько сложный язык использовать для обучения?
ak_47: (default)

[personal profile] ak_47 2017-08-24 12:10 pm (UTC)(link)
В этот момент старые люди восклицают 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).

[identity profile] birdwatcher.livejournal.com 2017-08-24 12:18 pm (UTC)(link)
Вот и оптимизация! Ну что за балаган, честное слово.
ak_47: (Default)

[personal profile] ak_47 2017-08-24 12:31 pm (UTC)(link)
Почему же балаган? Даже в Ц++ давно сделали: for(a : b) ...

[identity profile] birdwatcher.livejournal.com 2017-08-24 12:40 pm (UTC)(link)
Во всех языках есть for и foreach, но они легко отличаются друг от друга и не требуют для осмысления ленивого оператора[ ] и подобной экзотики. Я не против любых странностей, но использовать такое в преподавании?..
ak_47: (Default)

[personal profile] ak_47 2017-08-24 12:52 pm (UTC)(link)
Я слышал разные мнения почему тот или иной язык хорош/плох для преподавания. Если бы меня поставили перед выбором, то я бы скорее всего на С преподавал, т.к. в нём, типа, WYSIWYG такой. Что пишем, то и происходит. Но доводилось видеть толковых людей у которых первый язык был какой-нибудь скрипт или Джава. Думаю что влияние языка в преподавании преувеличено из-за холиваров вокруг этой темы.
Edited 2017-08-24 12:53 (UTC)
ak_47: (Default)

[personal profile] ak_47 2017-08-24 01:02 pm (UTC)(link)
Это потому что мы старые и у нас bias. :)

[identity profile] birdwatcher.livejournal.com 2017-08-24 01:06 pm (UTC)(link)
Так это bias в сторону выживания, как учит дедушка Талеб.
ak_47: (Default)

[personal profile] ak_47 2017-08-24 01:15 pm (UTC)(link)
Дедушка Талеб хитрый. Сам пишет книжки и разъезжает по миру, учит всех уму разуму, а у нас уже седые волосы в голове, и всё программируем. Эх...

[identity profile] dmpogo.livejournal.com 2017-08-24 03:49 pm (UTC)(link)
В преподовании плохо обычно ориентироваться на толковых - те и так поймут (или их надо учить уже другому)
fizzik: (дельфин)

[personal profile] fizzik 2017-08-24 06:36 pm (UTC)(link)
А зачем учить бестолковых программированию?

[identity profile] dmpogo.livejournal.com 2017-08-24 06:44 pm (UTC)(link)
Бестолковых учить тоже без толку. Все усилия обычно на тех четверочников. С другой стороны, в науке и они не нужны, а вот в промышленных областях, самое то. У меня зять тут изучал программирование с дважаскрипта. Забавные у него представления как все работает, мистические какие-то.
hope_t: (Default)

[personal profile] hope_t 2017-08-25 01:43 am (UTC)(link)
ржу в голос очень понимаю...
а у младенцев по другому мозг с рождения работает

[identity profile] birdwatcher.livejournal.com 2017-08-25 01:58 am (UTC)(link)
вот!

[identity profile] maksa.livejournal.com 2017-08-25 04:55 pm (UTC)(link)
Внезапно попал в число людей старше сорока лет. )
avysk: (Default)

[personal profile] avysk 2017-08-29 02:12 pm (UTC)(link)
Там просто 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 2017-08-29 14:13 (UTC)

[identity profile] birdwatcher.livejournal.com 2017-08-29 03:40 pm (UTC)(link)
Я и говорю, когда for делает не то, что я думаю, это звоночек.

[identity profile] slobin.livejournal.com 2017-08-29 04:54 pm (UTC)(link)
На этот вопрос надлежит отвечать конкретно-исторически. В питонах до третьего (до 2.7 включительно, который до сих пор много где используется) именно что аллоцирует четыре гигабайта (на самом деле ещё больше, на служебные всякие вещи). Поскольку это было жутко неудобно (чаще всего range использовалось в связке с for), придумали xrange, которая выдаёт "магический" объект специально для итераций.

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

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