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

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

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

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