/Hàm bytes – Built-in Functions – Python

Hàm bytes – Built-in Functions – Python

Hàm bytes 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 kiểu bytes, tương tự như kiểu dữ liệu bytes, từ các đối số cung cấp.

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ượ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 bytes – Built-in Functions – Python

2. Cú pháp hàm bytes

Cú pháp:

bytes([source[, encoding[, errors]]])

Tham số:

  • source (tùy chọn): Đối tượng hoặc chuỗi mà bạn muốn chuyển thành đối tượng kiểu 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àm bytes() đã được hỗ trợ từ Python 2.6 trở đi.

Mục đích chính:

  • Tạo một đối tượng kiểu bytes từ dữ liệu được cung cấp, cho phép xử lý dữ liệu dạng bytes.

3. Một số ví dụ minh họa hàm bytes

Dưới đây là các ví dụ để minh họa việc sử dụng hàm hàm bytes trong ngôn ngữ lập trình Python, để hiểu hơn về các đặc điểm và tham số khác nhau của nó.

3.1. Tạo bytes từ chuỗi với encoding mặc định

text = "Hello"
bytes_obj = bytes(text, 'utf-8')
print(bytes_obj)  # Output: b'Hello'

Giải thích:

  • bytes() được sử dụng để tạo một đối tượng bytes từ chuỗi text sử dụng encoding 'utf-8'.
  • Đối tượng bytes_obj 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 bytes từ danh sách số nguyên với hàm bytes

numbers = [72, 101, 108, 108, 111]  # Mã ASCII của 'H', 'e', 'l', 'l', 'o'
bytes_obj = bytes(numbers)
print(bytes_obj)  # Output: b'Hello'

Giải thích:

  • bytes() được sử dụng để tạo một đối tượng bytes từ danh sách các số nguyên numbers.
  • Đối tượng bytes_obj chứa các byte tương ứng với các số nguyên trong danh sách.

3.3. Tạo bytes từ chuỗi với encoding tùy chỉnh

text = "你好"  # Chuỗi tiếng Trung (UTF-8)
bytes_obj = bytes(text, 'utf-16')
print(bytes_obj)

Giải thích:

  • bytes() được sử dụng để tạo một đối tượng bytes từ chuỗi text với encoding 'utf-16'.
  • Đối tượng bytes_obj chứa các byte tương ứng với mã utf-16 của mỗi ký tự trong chuỗi.

3.4. Tạo bytes từ danh sách số nguyên và chỉnh sửa giá trị

numbers = [72, 101, 108, 108, 111]  # Mã ASCII của 'H', 'e', 'l', 'l', 'o'
bytes_obj = bytes(numbers)
print(bytes_obj)  # Output: b'Hello'

# Thay đổi giá trị của phần tử thứ 1 (mã ASCII của 'e')
modified_bytes = bytearray(bytes_obj)
modified_bytes[1] = 120  # Mã ASCII của 'x'
print(modified_bytes)  # Output: bytearray(b'Hxllo')

Giải thích:

  • bytes() được sử dụng để tạo một đối tượng bytes từ danh sách các số nguyên numbers.
  • bytearray() được sử dụng để tạo một đối tượng bytearray từ đối tượng bytes_obj để thay đổi giá trị của phần tử.
  • Chúng ta thay đổi giá trị của một phần tử trong bytearray.

3.5. Tạo bytes từ file với hàm bytes

with open('data.txt', 'rb') as file:
    data = bytes(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 bytes từ nội dung file.

3.6. Kết hợp bytes từ hai chuỗi khác nhau

str1 = "Hello"
str2 = " world!"
combined_bytes = bytes(str1, 'utf-8') + bytes(str2, 'utf-8')
print(combined_bytes)

Giải thích:

  • bytes() được sử dụng để tạo đối tượng bytes từ mỗi chuỗi, sử dụng encoding 'utf-8'.
  • Chúng ta kết hợp bytes từ hai chuỗi bằng cách nối chúng lại với nhau.