Принятый ответ правильный, но есть более умный / эффективный способ сделать это, если вам нужно конвертировать целую кучу символов ASCII в их коды ASCII одновременно. Вместо того, чтобы делать:
for ch in mystr:
code = ord(ch)
или чуть быстрее:
for code in map(ord, mystr):
вы конвертируете в нативные типы Python, которые итерируют коды напрямую. На Python 3 это тривиально:
for code in mystr.encode('ascii'):
и в Python 2.6 / 2.7, он лишь немного более сложный, потому что у него нет объекта bytes
в стиле Py3 (bytes
- это псевдоним для str
, который повторяется по символу), но они имеют bytearray
# If mystr is definitely str, not unicode
for code in bytearray(mystr):
# If mystr could be either str or unicode
for code in bytearray(mystr, 'ascii'):
Кодирование как тип, который итеративно повторяется по порядковому номеру, означает, что преобразование происходит намного быстрее; в локальных тестах на Py2.7 и Py3.5 повторение str
для получения его ASCII-кодов с использованием map(ord, mystr)
начинается примерно вдвое дольше для len
10 str
, чем с использованием bytearray(mystr)
на Py2 или mystr.encode('ascii')
на Py3, и когда str
увеличивается, множитель, уплаченный за map(ord, mystr)
, увеличивается до ~ 6,5x-7x.
Единственным недостатком является то, что преобразование происходит одновременно, поэтому ваш первый результат может занять немного больше времени, и действительно огромный str
будет иметь пропорционально большой временный bytes
/ bytearray
, но если это не заставит Вы перебиваете страницы, это вряд ли имеет значение.