Hàm bytearray là một hàm trong các Built-in Functions của ngôn ngữ lập trình Python được sử dụng để tạo một đối tượng mảng bytes có thể chỉnh sửa (mutable array of bytes). Đối tượng bytearray này cho phép thay đổi giá trị của từng phần tử, khác với kiểu dữ liệu bytes không thể chỉnh sửa (immutable array of bytes)
1. Kiểu dữ liệu không thể chỉnh sửa
Thực tế, kiểu dữ liệu bytes trong ngôn ngữ lập trình Python là kiểu dữ liệu không thể chỉnh sửa (immutable array of bytes), nghĩa là bạn không thể thay đổi giá trị của từng phần tử trong bytes
sau khi nó được tạo.
Cả 2 kiểu dữ liệu bytes và bytearray đều là kiểu dữ liệu trong Python để đại diện cho dữ liệu dạng bytes (danh sách các số nguyên từ 0 đến 255). Tuy nhiên, có một sự khác biệt quan trọng giữa chúng:
- bytes (kiểu không thể chỉnh sửa): Đây là một kiểu dữ liệu bất biến, nghĩa là sau khi tạo, bạn không thể thay đổi giá trị của bất kỳ phần tử nào trong
bytes
. Để tạo một đối tượngbytes
, bạn có thể sử dụng các hàm nhưbytes()
hoặc nối các đối tượng bytes lại với nhau.
- bytearray (kiểu có thể chỉnh sửa): Đây là một kiểu dữ liệu có thể thay đổi, nghĩa là bạn có thể thay đổi giá trị của từng phần tử trong
bytearray
sau khi tạo. Để tạo một đối tượngbytearray
, bạn có thể sử dụng hàmbytearray()
.
Đây là một ví dụ để minh họa sự khác biệt giữa bytes và bytearray:
# Tạo một đối tượng bytes (bất biến)
bytes_obj = b'hello'
print(type(bytes_obj))
#Output type: <class 'bytes'>
try:
bytes_obj[0] = 72 # Lỗi: bytes không thể chỉnh sửa
except TypeError as e:
print("Lỗi:", e)
# Tạo một đối tượng bytearray (có thể chỉnh sửa)
bytearray_obj = bytearray(b'hello')
#Output type: <class 'bytearray'>
# Thay đổi giá trị phần tử đầu tiên thành mã ASCII của 'H'
bytearray_obj[0] = 72
print(bytearray_obj) # Output: bytearray(b'Hello')
print(type(bytearray_obj))
Như bạn thấy, khi cố gắng thay đổi một phần tử trong kiểu dữ liệu bytes
, chúng ta gặp lỗi vì bytes
không thể chỉnh sửa, trong khi kiểu dữ liệu bytearray
cho phép chúng ta thay đổi giá trị của các phần tử.
2. Cú pháp hàm bytearray
Cú pháp:
bytearray([source[, encoding[, errors]]])
Tham số:
source
(tùy chọn): Đối tượng hoặc chuỗi mà bạn muốn tạo thành mảng bytes. Đối tượng này có thể là một iterable của các số nguyên trong khoảng 0 đến 255 hoặc là một chuỗi.encoding
(tùy chọn): Xác định encoding (mã hóa) được sử dụng nếusource
là một chuỗi. Mặc định là'utf-8'
.errors
(tùy chọn): Xác định cách xử lý lỗi nếu có. Mặc định là'strict'
.
Phiên bản Python hỗ trợ:
- Hàm bytearray đã được hỗ trợ từ Python 2.6 trở đi.
Mục đích chính:
- Tạo một đối tượng mảng bytes có thể chỉnh sửa (mutable) từ dữ liệu có sẵn hoặc từ chuỗi
3. Một số ví dụ
Dưới đây là một số các ví dụ tđể minh họa việc sử dụng hàm bytearray trong ngôn ngữ lập trình Python, bao gồm các tham số khác nhau và các đặc điểm quan trọng của hàm này.
3.1. Tạo bytearray từ chuỗi với encoding mặc định
text = "Hello, world!"
byte_array = bytearray(text, 'utf-8')
print(byte_array)
Giải thích:
bytearray()
được sử dụng để tạo một đối tượngbytearray
từ chuỗitext
sử dụng encoding'utf-8'
.- Đối tượng
byte_array
sẽ chứa các byte tương ứng với mã utf-8 của mỗi ký tự trong chuỗi.
3.2. Tạo bytearray từ danh sách số nguyên
numbers = [65, 66, 67, 68] # Mã ASCII của 'A', 'B', 'C', 'D'
byte_array = bytearray(numbers)
print(byte_array)
Giải thích:
bytearray()
được sử dụng để tạo một đối tượngbytearray
từ danh sách các số nguyênnumbers
.- Đối tượng
byte_array
sẽ chứa các byte tương ứng với các số nguyên trong danh sách.
3.3. Tạo bytearray và chỉnh sửa giá trị
data = bytearray(b'ABCDE')
print(data) # Output: bytearray(b'ABCDE')
data[1] = 69 # Thay đổi giá trị của phần tử thứ 2 thành mã ASCII của 'E'
print(data) # Output: bytearray(b'AECDE')
Giải thích:
bytearray()
được sử dụng để tạo một đối tượngbytearray
từ dữ liệu ban đầu.- Chúng ta thay đổi giá trị của một phần tử trong
bytearray
sử dụng chỉ số.
3.4. Tạo bytearray với encoding tùy chỉnh
text = "你好" # Chuỗi tiếng Trung (UTF-8)
byte_array = bytearray(text, 'utf-16')
print(byte_array)
Giải thích:
bytearray()
được sử dụng để tạo một đối tượngbytearray
từ chuỗitext
với encoding'utf-16'
.- Đối tượng
byte_array
sẽ chứa các byte tương ứng với mã utf-16 của mỗi ký tự trong chuỗi.
3.5. Tạo bytearray từ file
with open('data.txt', 'rb') as file:
data = bytearray(file.read())
print(data)
Giải thích:
- Chúng ta mở một file có tên ‘data.txt’ với chế độ đọc dưới dạng binary (
'rb'
). - Đọc nội dung của file và tạo một đối tượng
bytearray
từ nội dung file.
3.6. Kết hợp bytearray từ hai mảng bytes khác nhau
data1 = bytearray(b'Hello')
data2 = bytearray(b', world!')
combined_data = data1 + data2
print(combined_data)
Giải thích:
- Chúng ta có hai đối tượng
bytearray
,data1
vàdata2
. - Chúng ta kết hợp chúng bằng cách nối (
+
) để tạocombined_data
.
Các ví dụ trên giúp bạn hiểu rõ cách sử dụng bytearray
, từ việc tạo từ chuỗi, danh sách số nguyên, chỉnh sửa giá trị, sử dụng encoding tùy chỉnh, đọc từ file, và kết hợp từ các đối tượng bytearray
khác nhau.