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