В Си ‘0’ == 48 (если ASCII). Почему ‘0’ != 48 в Питоне?

582 просмотра
0
0 Комментариев

Почему в питоне нельзя приравнять(по смыслу): '0' == 48?
Ведь по кодировке ASCII это одно и тоже.
Просто в C же можно, а почему тут не действует?


Добавить комментарий

2 Answers

Python Опубликовано 18.12.2018
0

Тут не действует, потому что:
1) в Python обычные строки не ASCII, а UNICODE
2) главное это разные типы для сравнения которых надо делать явное приведение.

Дополнительная новость — в Python нет матриц и массивов в понимании Фортрана или С. Однако есть специальные модули, в которых похожие массивы реализованы.

Добавить комментарий
0

В Си '0' имеет тип int. В Питоне '0' имеет тип str. Строки не равны числам в Питоне. Питон — сильно-типизированный язык. str не превращается неявно в int.

Для сравнения приведите к одному типу:

>>> ord('0') == 48
True
>>> '0' == chr(48)
True

ord() возвращает порядковый номер Unicode символа (Unicode code point) как целое число.
chr() в обратную сторону работает: возвращает Unicode символ по его номеру.

Номера Unicode символов в ASCII диапазоне совпадают со значениями байтов, полученных кодированием этих символов, используя ASCII кодировку.

Байты (тип bytes) в Питоне (3) это коллекция чисел в диапазоне 0 <= b < 256. Байты в ASCII диапазоне, можно с помощью соответствующих символов в исходном коде задавать:

>>> b'0'[0] == 48
True

В Питоне, гарантировано 48 здесь получите (вне зависимости от кодировки исходного кода). В сторону: в общем случае Си не обязан ASCII кодировку использовать, поэтому '0' не обязан быть равным 48.

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up