其他提示
请注意, 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 的本地测试中,迭代 str
使用以下命令获取其 ASCII 代码 map(ord, mystr)
开始需要大约两倍的时间 len
10 str
比使用 bytearray(mystr)
在 Py2 或 mystr.encode('ascii')
在 Py3 上,并且作为 str
变得更长,乘数支付 map(ord, mystr)
升至~6.5x-7x。
唯一的缺点是转换是一次性完成的,所以你的第一个结果可能需要更长的时间,并且一个真正巨大的 str
会有相当大的临时 bytes
/bytearray
, ,但除非这迫使您进行页面抖动,否则这可能并不重要。
不隶属于 StackOverflow