5 に答える
ここから:
この関数
ord()
は、charのint値を取得します。そして、あなたが数字で遊んだ後に元に戻したい場合には、関数chr()
がトリックを行います。
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
Python 2には、順序が引数であるUnicodeunichr
文字を返す関数もありました。unichr
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
chr
Python 3では、の代わりにを使用できますunichr
。
ord()
それ自体はASCII値を提供しないことに注意してください。どんなエンコーディングでも文字の数値を提供します。したがって、ord('ä')
Latin-1を使用している場合は結果が228になり、TypeError
UTF-8を使用している場合は結果が大きくなる可能性があります。ユニコードを渡すと、代わりに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'):
bytes
また、Python 2.6/2.7 では、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 の両方でのローカル テストでは、astr
を使用して ASCII コードを取得するために a を反復すると、Py2 またはPy3 で使用するよりも10map(ord, mystr)
に約 2 倍の時間がかかります。 〜6.5x-7xに。len
str
bytearray(mystr)
mystr.encode('ascii')
str
map(ord, mystr)
唯一の欠点は、変換が一度に行われるため、最初の結果に少し時間がかかる可能性があり、本当に巨大な一時的な/str
が比例して大きくなる可能性があることですが、これによりページのスラッシングが発生しない限り、これは問題にならない可能性があります.bytes
bytearray