البايتات في بايثون
البايتات هي تسلسلات لبايتات مفردة غير قابلة للتغيير (immutable)، وهي مشابهة إلى حدّ كبير للسلاسل النصية. توفّر هذه الكائنات توابع تكون صالحة للاستخدام مع البيانات ذات الترميز ASCII نظرًا لأنّ الكثير من البروتوكولات الثنائية الرئيسية مستندة إلى هذا الترميز.
صيغة تعريف البايتات مماثلة لصيغة تعريف السلاسل النصية، باستثناء إضافة السابقة b
إلى عبارة التعريف وكما يلي:
b'still allows embedded "double" quotes' # علامات اقتباس مفردة
b"still allows embedded 'single' quotes". # علامات اقتباس مزدوجة
b'''3 single quotes''', b"""3 double quotes""" # علامات اقتباس ثلاثية
يمكن استخدام الدالة bytes()
كصيغة بديلة لتعريف البايتات:
bytes(10) # كائن بايتات فارغ وله طول محدّد
bytes(range(20)) # باستخدام مدى من الأعداد الصحيحة
يسمح باستخدام حروف الترميز ASCII (بصرف النظر عن الترميز المستخدم في الشيفرة)، ويجب إدخال أي قيمة ثنائية تتجاوز 127 باستخدام تسلسل التهريب (escape sequence) الملائم.
كما هو الحال مع السلاسل النصية، فبالإمكان استخدام السابقة r
لإيقاف عملية تهريب الحروف.
صحيح أنّ تمثيل البايتات يستند إلى النصوص ذات الترميز ASCII؛ إلا أنّ كائنات البايتات تسلك في الواقع سلوك تسلسل من الأعداد الصحيحة غير قابل للتغيير، وتكون كل قيمة في هذا التسلسل مقيّدة بالشرط الرياضية 0 <= x < 256
، ويؤدي تجاوز هذه القيود إلى إطلاق الخطأ ValueError
.
وضعت هذه القيود بصورة متعمّدة وذلك لتأكيد فكرة مفادها أنّه قد يكون بإمكان بعض خوارزميات معالجة النصوص أن تتعامل مع البيانات الثنائية إلّا أنّ الحال لا يكون كذلك دائمًا؛ فقد يؤدي معالجة البيانات الثنائية غير المرمّزة بالترميز ASCII بواسطة خوارزميات التعامل مع النصوص إلى تدمير البيانات.
مصادر
- صفحة Built-in Types في توثيق بايثون الرسمي.