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ượ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 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ượngbytes
từ chuỗitext
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ượngbytes
từ danh sách các số nguyênnumbers
.- Đố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ượngbytes
từ chuỗitext
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ượngbytes
từ danh sách các số nguyênnumbers
.bytearray()
được sử dụng để tạo một đối tượngbytearray
từ đối tượngbytes_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ượngbytes
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.