回答:
ここから:
関数ord()は、charの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 unichr(0x0a) == b'\x0a'.decode('ascii')
は-ascii:これはUnicodeであり、 Python)。
受け入れられた答えは正しいですが、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では、Py3スタイルのbytes
オブジェクトがないため(これ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)
ために約2倍の時間がかかってオフ開始をlen
10 str
使用するよりbytearray(mystr)
PY2やmystr.encode('ascii')
PY3に、としてstr
長くなる、乗数が支払いましたmap(ord, mystr)
上昇〜6.5x〜7x。
唯一の欠点は、変換が一度に行われることです。そのため、最初の結果には少し時間がかかる可能性があります。また、本当に巨大なものstr
は、それに比例して一時的なbytes
/ bytearray
が大きくなりますが、これによりページのスラッシングが強制されない限り、これは問題になりません。