Відповіді:
Від сюди :
Функція ord () отримала б значення int знака. І якщо ви хочете перетворити назад після гри з номером, функція chr () робить трюк.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
У Python 2 також є unichr
функція, повертаючи символ Unicode , порядковий параметр якого є unichr
аргументом:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
У Python 3 ви можете використовувати chr
замість unichr
.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'
. У Python 3 (або unichr
в Python 2) число введення інтерпретується як ціле порядкове порядкове число Unicode кодової точки: unichr(0x439) == '\u0439'
(перші 256 цілих чисел мають те саме відображення, як і Latin-1:, unichr(0xe9) == b'\xe9'.decode('latin-1')
перші 128 - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')
це річ Unicode, а не Пітон).
Зауважте, що ord()
не дає вам значення ASCII; він дає вам числове значення символу в будь-якому кодуванні, в якому він знаходиться. Тому результат ord('ä')
може бути 228, якщо ви використовуєте Latin-1, або він може підняти a, TypeError
якщо ви використовуєте UTF-8. Він може навіть повернути кодову точку Unicode, замість того, якщо ви передасте їй unicode:
>>> ord(u'あ')
12354
Ви шукаєте:
ord()
Прийнята відповідь правильна, але є більш розумний / ефективний спосіб зробити це, якщо вам потрібно перетворити цілу купу символів 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, ітерація a 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
, але якщо це не змусить вас перемолоти сторінку, це, швидше за все, не має значення. .