Python 3.x , türler arasında net bir ayrım yapar:
str= '...'değişmez değerler = bir Unicode karakter dizisi (Python'un nasıl derlendiğine bağlı olarak UTF-16 veya UTF-32)
bytes= b'...'değişmez değerler = bir sekizli dizisi (0 ile 255 arasında tamsayılar)
Java veya C # ile konum tanıdık Eğer varsa, aklınıza strolarak Stringve bytessıra byte[]. Eğer SQL ile bilginiz varsa, düşünmek strkadar NVARCHARve bytesşekilde BINARYya BLOB. Windows kayıt defteri hakkında bilginiz varsa, düşünmek strkadar REG_SZve bytesşekilde REG_BINARY. C (++) hakkında bilginiz varsa, öğrendiğiniz her şeyi charve dizeleri unutun , çünkü KARAKTER BİR BYTE DEĞİLDİR . Bu fikir çok eski.
Sen kullanmak strMetni temsil etmek istediğinizde.
print('שלום עולם')
Sen kullanmak bytesEğer yapılar gibi düşük seviyeli ikili veri temsil etmek istediğinizde.
NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0]
Sen edebilirsiniz kodlamak bir stra bytesnesne.
>>> '\uFEFF'.encode('UTF-8')
b'\xef\xbb\xbf'
Ve eğer bir deşifre edebilir bytesbir içine str.
>>> b'\xE2\x82\xAC'.decode('UTF-8')
'€'
Ancak iki türü serbestçe karıştıramazsınız.
>>> b'\xEF\xBB\xBF' + 'Text with a UTF-8 BOM'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't concat bytes to str
b'...'Notasyonu biraz o ASCII karakterleri yerine onaltılık numaraları ile belirtilmesi 0x01-0x7F bayt izin vermesidir karıştırıyor.
>>> b'A' == b'\x41'
True
Ama vurgulamalıyım ki, karakter bir bayt değildir .
>>> 'A' == b'A'
False
Python 2.x'te
Python'un 3.0 öncesi sürümlerinde metin ve ikili veriler arasında bu tür bir ayrım yoktu. Bunun yerine:
unicode= u'...'değişmez değerler = Unicode karakter dizisi = 3.xstr
str= '...'değişmez değerler = şaşkın bayt / karakter dizileri
- Genellikle metin, bazı belirtilmemiş kodlamalarda kodlanır.
- Ancak
struct.packçıktı gibi ikili verileri temsil etmek için de kullanılır .
2.x-3.x geçişini kolaylaştırmak için, b'...'ikili dizelerin ( bytes3.x içinde olması gerekir ) metin dizelerinden ( str3'te olması gerekir) ayırt edilmesini sağlamak için değişmez sözdizimi Python 2.6'ya geri bildirildi . .x). bÖnek 2.x hiçbir şey yapmaz, ama söyler 2to33.x Unicode dizeye dönüştürmek için değil senaryoyu
Yani evet, b'...'Python'daki değişmez değerler PHP ile aynı amaca sahiptir.
Ayrıca, meraktan, diğer şeyleri yapan b ve u'dan daha fazla sembol var mı?
Ön rek, ham dize oluşturur (örneğin, sekme yerine r'\t'ters eğik çizgi + 'dır t) ve üç tırnak işareti verir '''...'''veya """..."""çok satırlı dize değişmez değerlerine izin verir.