ord()
はASCIIの値そのものをあなたに与えないことに注意してください。そのため、Latin-1を使用している場合はord('ä')
の結果は228になり、UTF-8を使用している場合はTypeError
が発生する可能性があります。 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では、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の両方のローカルテストでは、map(ord, mystr)
を使用してASCIIコードを取得するためにstr
を繰り返すと、Py2でbytearray(mystr)
またはPy3でmystr.encode('ascii')
を使用するよりもlen
10 str
の約2倍の時間がかかります、およびstr
が長くなると、map(ord, mystr)
に支払われる乗数は〜6.5x-7xに上がります。
唯一の欠点は、変換が一度にすべて行われるため、最初の結果に少し時間がかかる可能性があり、本当に巨大なstr
が比例的に大きな一時bytes
/bytearray
を持つことになりますが、ページスラッシングを強制しない限り、これはそうではありません問題になる可能性があります。