2012-06-06 29 views
7

Sadece 7 gün içinde Python 3'ü öğrendim ve bayt dizgilerimi anlamamda biraz delik olduğunu hissediyorum. Python 3'te, bir bayt dizgim var b'1234' varsayalım. Onun yineleyici tamsayılar döndürür:Python 3 bytes.index: daha iyi bir yol?

Python 3.2.3 (default, May 26 2012, 18:49:27) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 

>>> for z in b'1234': 
... print(type(z)) 
... 
<class 'int'> 
<class 'int'> 
<class 'int'> 
<class 'int'> 
ben bayt dizesinde bir tamsayı bulabilirsiniz

(in tanımı eşitlik arar olmasıdır):

>>> 0x32 in b'1234' 
True 

Ancak, ben endeksi bulmak istiyoruz Bayt dizesinde verilen bir tamsayı. Ben Python daha şık olduğunu biliyoruz

>>> x = 0x32 
>>> b'1234'.index(bytes([x])) 
1 

: Ben bulmak istiyorum değişken x varsa, bu şimdiye kadar geldim en iyisidir, Şimdi

>>> b'1234'.index(b'2') 
1 

: bytes.index bir alt gerektirir Daha. Açıkça belirgin bir şey eksik. Tek bir tam sayı dizisi oluşturmaktan başka bir şey yapmak için daha basit bir yol var mı? Yoksa bu gerçekten mi?

+1

Ayrıca arkadaki soru da, neden bayt dizinini bulmak istiyorsunuz? – pepr

+0

Eğer bilmeniz gerekiyorsa :) Bu, sanal makinenin bir parçası olup, bunlardan biri talimatların bir bayt dizinine ihtiyaç duymaktadır. Zork ve diğer motor maceralarını o motora dayalı olarak oynamak için kullanılan Z-makine özelliklerinin 3. versiyonunu uygular. Bunu kontrol etmek isterseniz, http://code.google.com/p/pyzmachine adresinde. Bu benim ilk çabam, bu yüzden iyileştirme noktaları takdir ediliyor. –

cevap

5

Evet, bunu yapmanın yolu budur.

Onun kod noktasında dayalı bir karakterin bir karakter aramak için yol çok farklı değil: Ayrıca

x = 0x32 
i ='1234'.index(chr(x)) 
+0

İlginç - chr()'un bir dize oluşturduğunu fark etmemiştim. Gerçekten de, dizgenin bir eleman örneğinin bir örneğini temsil etmenin tek yolu dizelerdir. –

+0

@RobertB: Evet. Python char tipini bilmiyor. Karakter (diğer dillerden farklı olarak) teknik olarak sadece uzunluk 1 olan dizedir. – pepr

0

, Python 3 Bölüm 4. Strings içine Mark Pilgrim'in Dive de bakabilirsiniz, Kısım 4.6. Strings vs. Bytes. Eski Python 2.x dizeleriyle (Python 3'te bayt türüne dönüştü) ve yeni Python 3 dizgisi prensipte nasıl farklılıklar olduğunu açıklar.