Содержимое
Python vs Си (продолжение) …Ещё один пример - числа в Си и Python. У каждого числа есть тип. Например, возьмём тип int, целое число. Чтобы хранить что-то в памяти (в том числе число), нужно выделить некоторое количество памяти для его хранения. Есть, например тип int32 - это значит целое число, занимающее максимум 32 бита. Если для хранения числа потребуется больше битов, мы не сможем его хранить как int32. 32-битное число - это максимум 2147483647. А минимальное значение будет -2147483647. Если нужно число больше, придётся использовать int64. Если, наоборот, число будет совсем маленьким - можно взять int8. Если мы знаем, что наше число не может быть отрицательным, можно использовать тип unsigned int - то есть число без знака, и в нём уместится уже в 2 раза большее число, чем 2 миллиарда, упомянутые выше. Зачем это знать питонисту? Скажем, целые числа в Python сделаны настолько user-френдли, что они не ограничены ни 32 битами, ни даже 64 - можно даже не беспокоиться о том, что используешь слишком большое число. Но вот с дробями, float или double есть нюансы. В математике дроби могут иметь бесконечное количество знаков после запятой, например, если разделить 10 на 3, мы получим число 3,333333… . У этого числа бесконечное количество цифр после запятой, а значит, чтобы хранить его в памяти, понадобится бесконечное количество памяти. А так не бывает - на хранение одной дроби выделяется ограниченное количество памяти, и болше взять мы не можем. Поэтому дроби в итоге очень часто имеют неточное значение - лишние цифры «обрезаются». Что это значит для программиста? Это значит, что мы не можем сравнивать дроби и получать гарантированно верное значение. Например, мы делаем какие-то вычисления по бухгалтерии, и ожидаем, что результат будет равен 100,123456. Поэтому мы сравниваем полученное число с 100,123456 и на этом основываем какую-то логику. А в реальности окажется, что мы получили не 100,123456, а, например, 100,123455 - потому что, опять-таки дроби часто невозможно передать точно. И используя операторы "равно" или "больше" или "меньше" мы получим не то, что ожидаем. Это лишь пара примеров, почему понимание более низкоуровневых механизмов важно даже если вы метите в разработчика на высокоуровневых языках, таких как Python. И ещё Python написан на Си, так что всё что есть в питоне - это всего лишь удобный фасад над операциями на Си - и знание этого может помогать принимать верные решения при написании кода. Так что ещё раз - всем новичкам очень рекомендую гарвардский бесплатный курс CS50 (ссылки на него есть в этом посте).