Yanıtlar:
Gönderen burada :
fonksiyon ord () karakterin int değerini alır. Ve sayı ile oynadıktan sonra dönüştürmek istediğinizde, işlev chr () hile yapar.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
Python 2'de, sıralaması argüman olan Unicode karakterini unichrdöndüren fonksiyon da vardır :unichr
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
Python 3'te chrbunun yerine kullanabilirsiniz unichr.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'. Python 3'te (veya unichrPython 2'de) giriş numarası Unicode kod noktası tamsayı sıralaması olarak yorumlanır: unichr(0x439) == '\u0439'(ilk 256 tamsayı latin-1 ile aynı eşleşmeye sahiptir: unichr(0xe9) == b'\xe9'.decode('latin-1')ilk 128 - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')bu bir Unicode şeyidir, değil Python).
ord()ASCII değerini size vermediğini unutmayın ; hangi kodlamada olursa olsun karakterin sayısal değerini verir. Bu nedenle ord('ä')Latin-1 kullanıyorsanız sonuç 228 olabilir veya TypeErrorUTF-8 kullanıyorsanız a değerini yükseltebilir . Unicode iletirseniz bunun yerine Unicode kod noktasını da döndürebilir:
>>> ord(u'あ')
12354
Şunu arıyorsunuz:
ord()
Kabul edilen cevap doğrudur, ancak bir sürü ASCII karakterini aynı anda ASCII kodlarına dönüştürmeniz gerekiyorsa bunu yapmanın daha akıllı / verimli bir yolu vardır. Yapmak yerine:
for ch in mystr:
code = ord(ch)
veya biraz daha hızlı:
for code in map(ord, mystr):
kodları doğrudan yineleyen Python yerel türlerine dönüştürürsünüz. Python 3'te bu çok önemli:
for code in mystr.encode('ascii'):
ve Python 2.6 / 2.7'de, Py3 tarzı bir bytesnesneye sahip olmadığı için ( karakter bytesiçin stryinelenen bir takma addır ), ancak aşağıdakilere sahipler 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'):
Yerel olarak sıralı olarak yinelenen bir tür olarak kodlama, dönüşümün çok daha hızlı olduğu anlamına gelir; hem Py2.7 hem de Py3.5 üzerindeki yerel testlerde str, ASCII kodlarını kullanarak a'yı yinelemek, 10 için Py2 veya Py3'te kullanmaktan map(ord, mystr)yaklaşık iki kat daha uzun sürmeye başlar ve daha uzun sürdüğü zaman, çarpanlar yükselir ~ 6.5x-7x'e kadar.lenstrbytearray(mystr)mystr.encode('ascii')strmap(ord, mystr)
Tek dezavantajı, dönüşümün bir kerede olması, bu nedenle ilk sonucunuzun biraz daha uzun sürebileceği ve gerçekten muazzam strbir orantılı olarak büyük bir geçici olacağı bytes/ bytearrayancak bu sizi sayfanın daralmasına zorlamadığı sürece, bunun önemli olmadığı muhtemeldir. .