Python proqramlaşdırma dilində baytlarla işləmək üçün nəzərdə tutulan ikinci tip isə bytearray (baytlar massivi) tipidir. Bundan öncə tanış olduğumuz bytes tipli obyektlərə tətbiq edilən metod və əməliyyatlar bytearray obyektləri üçün də keçərlidir. Bununla belə, bytes tipindən fərqli olaraq, bytearray tipinin obyektlərini bilavasitə dəyişmək mümkündür. Məhz bu məqsədlə onlar üçün əlavə metodlar nəzərdə tutulmuşdur.
İndi isə gəlin bytearray obyektlərini meydana gətirən üsulları nəzərdən keçirək.
bytearray([sətir, kodlaşdırma[, xətalar]])
Bu funksiyadan parametrlərsiz istifadə edildiyi təqdirdə boş bytearray obyektini qaytarır:
>>> bytearray()
bytearray(b'')
>>>
Verilmiş sətri bytearray obyektinə çevirmək üçün funksiyadan minimum iki parametrlə istifadə olunmalıdır. Sadəcə sətir verilib, kodlaşdırma göstərilmədiyi təqdirdə xəta qeydə alınacaq:
>>> bytearray('Python', 'utf-8')
bytearray(b'Python')
>>> bytearray('Python')
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
bytearray('Python')
TypeError: string argument without an encoding
>>>
Funksiyanın üçüncü parametri olan xətalar isə xəta emaledicisinin göstərilməsi üçündür. Siz onlarla əvvəlki mövzuda tanış olmuşdunuz.
Aşağıdakı nümunələri nəzərdən keçirin:
>>> bytearray('Azərbaycan', 'ascii', 'strict')
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
bytearray('Azərbaycan', 'ascii', 'strict')
UnicodeEncodeError: 'ascii' codec can't encode character
'\u0259' in position 2: ordinal not in range(128)
>>> bytearray('Azərbaycan', 'ascii', 'replace')
bytearray(b'Az?rbaycan')
>>> bytearray('Azərbaycan', 'ascii', 'ignore')
bytearray(b'Azrbaycan')
>>> bytearray('Azərbaycan', 'ascii', 'xmlcharrefreplace') bytearray(b'Azərbaycan')
>>> bytearray('Azərbaycan', 'ascii', 'backslashreplace') bytearray(b'Az\\u0259rbaycan')
>>> bytearray('Azərbaycan', 'ascii', 'namereplace')
bytearray(b'Az\\N{LATIN SMALL LETTER SCHWA}rbaycan')
>>>
bytearray([ardıcıllıq])
Bu funksiya 0 ilə 255 (hər ikisi daxil olmaqla) aralığında yerləşən tam ədədlərin ardıcıllığını bytearray obyektinə çevirməyə imkan verir. Verilmiş ədəd aralığa daxil deyilsə, ValueError xətası qeydə alınır:
>>> bytearray([97, 108, 109, 97])
bytearray(b'alma')
>>> bytearray([601, 116, 105, 114])
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
bytearray([601, 116, 105, 114])
ValueError: byte must be in range(0, 256)
>>>
Diqqətlə baxsanız, görəcəksiniz ki, ardıcıllıq şəklində verdiyimiz tam ədədlər Unicode simvollarının kodlarıdır.
bytearray(ədəd)
Burada ədəd elementlərin sayıdır. Hər bir element sıfırıncı simvolu özündə saxlayır. Funksiya miqdarı verilmiş bu elementləri baytlar massivinə çevirir:
>>> bytearray(5)
bytearray(b'\x00\x00\x00\x00\x00')
>>>
bytearray.fromhex(sətir)
Burada sətir verilmiş simvolların onaltılıq say sistemindəki kodlarından ibarətdir. Funksiya bu sətri bytearray tipli obyektə çevirir. Çevrilmə zamanı sətirdəki boşluqlar nəzərə alınmır:
>>> bytearray.fromhex("61 6c 6d 61")
bytearray(b'alma')
>>>
Dəyişən tip olduğuna görə baytlar massivini dəyişmək olur:
>>> s = bytearray('Python', 'utf-8')
>>> s
bytearray(b'Python')
>>> s[0] = 74
>>> s
bytearray(b'Jython')
>>>
bytearray obyektlərini dəyişmək üçün aşağıdakı metodlardan da istifadə edilə bilər:
bytearray.append(ədəd)
Bu metod obyektin sonuna kodu ədəd şəklində göstərilmiş elementi əlavə edir:
>>> s = bytearray('alma', 'utf-8')
>>> s
bytearray(b'alma')
>>> s.append(110)
>>> s
bytearray(b'alman')
>>>
bytearray.extend([ardıcıllıq])
Bu metod obyektin sonuna kodları ardıcıllıq şəklində verilmiş elementləri əlavə edir:
>>> s = bytearray('alman', 'utf-8')
>>> s
bytearray(b'alman')
>>> s.extend([108, 97, 114])
>>> s
bytearray(b'almanlar')
>>>
Burada ardıcıllıq baytlar ardıcıllığı kimi də verilə bilər:
>>> s = bytearray('alman', 'utf-8')
>>> s
bytearray(b'alman')
>>> s.extend(b'lar')
>>> s
bytearray(b'almanlar')
>>>
Baytlar massivinin sonuna bir neçə elementi + və += operatorları vasitəsilə də əlavə etmək olar:
>>> s = bytearray('kar', 'utf-8')
>>> s
bytearray(b'kar')
>>> s = s + b'van'
>>> s
bytearray(b'karvan')
>>> s += b'saray'
>>> s
bytearray(b'karvansaray')
>>>
bytearray obyektinin sonuna bir neçə elementi obyekt diliminə qiymət mənimsətməklə də əlavə etmək mümkündür:
>>> s = bytearray('bala', 'utf-8')
>>> s[len(s):] = b'ban'
>>> s
bytearray(b'balaban')
>>>
bytearray.insert(indeks, ədəd)
Bu metod bytearray obyektinə kodu ədəd şəklində verilmiş elementi indeks kimi göstərilmiş mövqedən daxil edir:
>>> s = bytearray('zaan', 'utf-8')
>>> s.insert(2, 109)
>>> s
bytearray(b'zaman')
>>>
bytearray.pop(indeks)
Bu metod bytearray obyektinin indeks kimi göstərilmiş mövqedəki elementini silir və onun kodunu qaytarır. Əgər indeks boş buraxılıbsa, ən son element silinir və kodu qaytarılır:
>>> s = bytearray('bazzar', 'utf-8')
>>> s.pop(2)
122
>>> s
bytearray(b'bazar')
>>> s.pop()
114
>>> s
bytearray(b'baza')
>>>
bytearray.remove(ədəd)
Bu metod bytearray obyekti daxilində kodu ədəd şəklində göstərilmiş ilk elementi taparaq silir. Göstərilmiş element obyekt daxilində yoxdursa, ValueError xətası qeydə alınır:
>>> s = bytearray('salat', 'utf-8')
>>> s.remove(108)
>>> s
bytearray(b'saat')
>>> s.remove(97)
>>> s
bytearray(b'sat')
>>> s.remove(108)
Traceback (most recent call last):
File "<pyshell#25>", line 1, in <module>
s.remove(108)
ValueError: value not found in bytearray
>>>
bytearray obyektindən element(lər)i silmək üçün del operatorundan da istifadə edilə bilər:
>>> s = bytearray('dallan', 'utf-8')
>>> del s[2]
>>> s
bytearray(b'dalan')
>>> del s[2:4]
>>> s
bytearray(b'dan')
>>>
bytearray.reverse()
Bu metod bytearray obyektinin elementlərini tərs ardıcıllıqda düzür:
>>> s = bytearray('zaman', 'utf-8')
>>> s.reverse()
>>> s
bytearray(b'namaz')
>>>
bytearray.decode(kodlaşdırma, xətalar)
Verilmiş bytearray obyektini str (sətir) obyektinə çevirmək üçün decode() metodundan istifadə edilir. Burada kodlaşdırma və xətalar parametrlərinin yazılması məcburi deyil. Parametrlər boş buraxıldığı təqdirdə default olaraq (susmaya görə) kodlaşdırma utf-8, xəta emaledicisi də strict qəbul ediləcək. Digər xəta emaledicilərinin istifadəsi əvvəlki mövzularda izah edildiyi kimidir. Müxtəlif kodlaşdırmalar ilə bağlı Python dilinin rəsmi dokumentasiyasında (https://docs.python.org/3.14) Standart Kodlaşdırmalar Cədvəlinə baxa bilərsiniz.
Aşağıdakı nümunələri nəzərdən keçirin:
>>> s1 = bytearray('Gürzə', 'utf-8')
>>> s2 = bytearray('Python', 'utf-8')
>>> s1.decode()
'Gürzə'
>>> s2.decode("ascii", "strict")
'Python'
>>>
Baytlar massivini sətrə çevirmək üçün str() funksiyasından da istifadə edilə bilər:
>>> s = bytearray('Azərbaycan', 'utf-8')
>>> s
bytearray(b'Az\xc9\x99rbaycan')
>>> str(s, 'utf-8')
'Azərbaycan'
>>>

“Baytlar massivi” üçün bir şərh
Şərh üçün bağlıdır.