/Hàm bytearray – Built-in Functions

Hàm bytearray – Built-in Functions

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 Pythonkiể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ượng bytes, 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ượng bytearray, bạn có thể sử dụng hàm bytearray().

Đâ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ử.

Hàm bytearray – Built-in Functions

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ếu source 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ượng bytearray từ chuỗi text 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ượng bytearray từ danh sách các số nguyên numbers.
  • Đố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ượng bytearray 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ượng bytearray từ chuỗi text 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, data1data2.
  • Chúng ta kết hợp chúng bằng cách nối (+) để tạo combined_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.