2014-07-08 13 views
6

Python için oldukça yeni ve dinamik bir dil olduğunu takdir ediyorum. İlk piton koduna Bazı 30 dakika, ben bytes tipi biraz garip davrandığını fark ettik (az söylemek):Neden (bytes())

a = bytes() 
print type(a) 
// prints: <type 'str'> 

Burada deneyin: http://ideone.com/NqbcHk

Şimdi docs demek strings ve bytes, .format ve .encode istisnalarıyla çok benzer davranırlar ancak aynı türde olmalarını beklemiyordum. Sağlamak istediğim, kodumdaki gerçek baytlarla çalışmam ve herhangi bir zorlama/kodlama/kod çözme yapılmamasıdır.

Peki burada neler oluyor?

+0

Python 3'te, baytlar bayttır, değil str. Yanlış sürümü kontrol ediyorsun :) – aIKid

+0

Teşekkürler çocuklar - utanıyorum. :-) gitmeden önce biraz kahve almalıyım –

cevap

10

bytes türünde Python 3.x sürümü yeni. Python 2.x'te, uyumluluk dizisi olarak, bytes, str için basit bir takma addır.

burada bu konuda daha fazla bilgi: https://docs.python.org/2/whatsnew/2.6.html#pep-3112-byte-literals

Python 3.0 ya b'string' olarak veya bir bayt kurucu kullanılarak dilin temel dize türü olarak Unicode benimser ve farklı 8 bitlik değişmezleri belirtmektedir. Gelecekte uyumluluk için Python 2.6, baytları olarak str türü için eşanlamlı olarak ekler ve ayrıca b'' notasyonunu destekler.

2.6 str, 3.0 bayt cinsinden çeşitli şekillerde farklıdır; Çoğu özellikle, kurucu tamamen farklıdır. 3.0'da, bytes([65, 66, 67]), ABC'yi temsil eden baytları içeren 3 eleman uzunluğundadır; 2.6, bytes([65, 66, 67]), listenin str() numaralı temsilcisini temsil eden 12 baytlık dizgiyi döndürür.

2.6'da baytların birincil kullanımı, isinstance(x, bytes) gibi nesne tipi testleri yazmak olacaktır. Bu, 'un 2x3 dönüştürücüsüne yardımcı olur; 2.x kodunun dizeleri karakter veya 8 bit bayt içermesi amaçlanır mı; Artık, bayt veya str'yi 'a tam olarak gösterebilir ve sonuçta ortaya çıkan kod Python 3.0'da doğru olarak olacaktır.

8

Python 3 belgelerine bakıyorsunuz. Python 2, bytes, ileri uyumlu kod yazmayı kolaylaştırmak için str için bir diğer addır (Python 2'nin str bir bayt dizgisidir, Python 3 str ise Python 2'de unicode olarak adlandırılmıştır).

Ayrıntılar için bkz. What’s New In Python 3.0.

İlgili konular