Risposte:
Da qui :
La funzione ord () otterrebbe il valore int del carattere. E nel caso tu voglia tornare indietro dopo aver giocato con il numero, la funzione chr () fa il trucco.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
In Python 2, c'è anche la unichrfunzione, che restituisce il carattere Unicode il cui ordinale è l' unichrargomento:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
In Python 3 puoi usare chrinvece di unichr.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'. In Python 3 (o unichrin Python 2), il numero di input viene interpretato come numero intero di punti di codice Unicode ordinale: unichr(0x439) == '\u0439'(i primi 256 numeri interi hanno la stessa mappatura di latino-1 unichr(0xe9) == b'\xe9'.decode('latin-1'):, i primi 128 - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')è una cosa Unicode, non Pitone).
Nota che ord()non ti dà il valore ASCII in sé; ti dà il valore numerico del personaggio in qualunque codifica sia. Pertanto il risultato di ord('ä')può essere 228 se stai usando Latin-1, oppure può aumentare a TypeErrorse stai usando UTF-8. Può anche restituire il punto di codice Unicode invece se gli passi un unicode:
>>> ord(u'あ')
12354
Stai cercando:
ord()
La risposta accettata è corretta, ma esiste un modo più intelligente / efficiente per farlo se è necessario convertire contemporaneamente un intero gruppo di caratteri ASCII nei loro codici ASCII. Invece di fare:
for ch in mystr:
code = ord(ch)
o leggermente più veloce:
for code in map(ord, mystr):
converti in tipi nativi di Python che ripetono direttamente i codici. Su Python 3, è banale:
for code in mystr.encode('ascii'):
e su Python 2.6 / 2.7, è solo leggermente più coinvolto perché non ha un bytesoggetto in stile Py3 ( bytesè un alias per str, che scorre per carattere), ma hanno 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'):
La codifica come un tipo che itera in modo nativo per ordinale significa che la conversione procede molto più velocemente; nei test locali su Py2.7 e Py3.5, l'iterazione di a strper ottenere i suoi codici ASCII usando map(ord, mystr)inizia prendendo circa il doppio del tempo per un len10 strrispetto all'utilizzo bytearray(mystr)su Py2 o mystr.encode('ascii')su Py3 e, man mano che strsi allunga, il moltiplicatore paga per gli map(ord, mystr)aumenti a ~ 6.5x-7x.
L'unico aspetto negativo è che la conversione è tutta in una volta, quindi il tuo primo risultato potrebbe richiedere un po 'più di tempo, e un enorme davvero stravrebbe un temporaneo proporzionalmente grande bytes/ bytearray, ma a meno che ciò non ti costringa a sfogliare le pagine, questo non è probabilmente importante .