Sự khác biệt giữa byte và bytearray trong python là gì?

Phương thức

bytearray[[source[, encoding[, errors]]]]
6 trả về một đối tượng bytearray là một mảng của các byte đã cho

Thí dụ

prime_numbers = [2, 3, 5, 7]

# convert list to bytearray byte_array = bytearray[prime_numbers]

print[byte_array] # Output: bytearray[b'\x02\x03\x05\x07']

bytearray[] Cú pháp

Cú pháp của phương thức

bytearray[[source[, encoding[, errors]]]]
6 là

bytearray[[source[, encoding[, errors]]]]

Phương thức

bytearray[[source[, encoding[, errors]]]]
6 trả về một đối tượng bytearray [i. e. mảng byte] là chuỗi số nguyên có thể thay đổi [có thể sửa đổi] trong phạm vi
bytearray[[source[, encoding[, errors]]]]
1

Nếu bạn muốn phiên bản không thay đổi, hãy sử dụng phương thức bytes[]

bytearray[] Tham số

bytearray[[source[, encoding[, errors]]]]
6 có ba tham số tùy chọn

  • nguồn [Tùy chọn] - nguồn để khởi tạo mảng byte
  • mã hóa [Tùy chọn] - nếu nguồn là một chuỗi, mã hóa của chuỗi
  • lỗi [Tùy chọn] - nếu nguồn là một chuỗi, hành động cần thực hiện khi chuyển đổi mã hóa không thành công [Đọc thêm. mã hóa chuỗi]

Tham số nguồn có thể được sử dụng để khởi tạo mảng byte theo các cách sau

TypeDescriptionStringChuyển đổi chuỗi thành byte bằng cách sử dụng

bytearray[[source[, encoding[, errors]]]]
3 Cũng phải cung cấp lỗi mã hóa và tùy chọnIntegerTạo một mảng có kích thước được cung cấp, tất cả được khởi tạo thành nullObjectMột bộ đệm chỉ đọc của đối tượng sẽ được sử dụng để khởi tạo mảng byteIterableTạo một mảng có kích thước bằng với số lần lặp và được khởi tạo

Trong bài viết về đoạn mã Python nhỏ này, tôi sẽ mượn từ toàn bộ bài viết về chủ đề mà bạn có thể tìm thấy tại đây

Vì vậy, sự khác biệt giữa byte và bytearray trong Python là gì?

Không có sự khác biệt thực sự giữa chuỗi byte và mảng byte ngoại trừ thực tế là chuỗi byte là bất biến và mảng byte có thể thay đổi. Nếu đúng như vậy thì tại sao Python lại có cả hai. Một lời giải thích là một số ứng dụng hoạt động kém với các chuỗi bất biến. Ví dụ: các hoạt động IO liên quan đến bộ đệm, đối với mỗi lần bổ sung vào bộ đệm, một bộ nhớ mới phải được phân bổ cho việc nối và sao chép. Đây là một quá trình chậm, đó là lý do tại sao một mảng byte có thể thay đổi được giải cứu

Sự khác biệt giữa

bytearray[[source[, encoding[, errors]]]]
0 và
bytearray[[source[, encoding[, errors]]]]
1 là
bytearray[[source[, encoding[, errors]]]]
2 trả về một đối tượng không thể thay đổi và
bytearray[[source[, encoding[, errors]]]]
6 trả về một đối tượng có thể thay đổi. Vì vậy, bạn có thể sửa đổi loại
bytearray[[source[, encoding[, errors]]]]
4 chứ không phải loại
# Single Integer Input Argument
print[bytes[]]
print[bytes[2]]
print[bytes[4]]

'''
b''
b'\x00\x00'
b'\x00\x00\x00\x00'
'''
0

Đây là một ví dụ tối thiểu thể hiện độc đáo sự khác biệt của hai chức năng

>>> a = bytes[3]
>>> b = bytearray[3]
>>> a
b'\x00\x00\x00'
>>> b
bytearray[b'\x00\x00\x00']
>>> a[0] = 1
Traceback [most recent call last]:
  File "", line 1, in 
    a[0] = 1
TypeError: 'bytes' object does not support item assignment
>>> b[0] = 1
>>> b
bytearray[b'\x01\x00\x00']

Bạn tạo hai biến

# Single Integer Input Argument
print[bytes[]]
print[bytes[2]]
print[bytes[4]]

'''
b''
b'\x00\x00'
b'\x00\x00\x00\x00'
'''
1 và
# Single Integer Input Argument
print[bytes[]]
print[bytes[2]]
print[bytes[4]]

'''
b''
b'\x00\x00'
b'\x00\x00\x00\x00'
'''
2. Cái trước là
# Single Integer Input Argument
print[bytes[]]
print[bytes[2]]
print[bytes[4]]

'''
b''
b'\x00\x00'
b'\x00\x00\x00\x00'
'''
0 và cái sau là
bytearray[[source[, encoding[, errors]]]]
4—cả hai đều mã hóa cùng một dữ liệu

Tuy nhiên, nếu bạn cố gắng sửa đổi đối tượng

# Single Integer Input Argument
print[bytes[]]
print[bytes[2]]
print[bytes[4]]

'''
b''
b'\x00\x00'
b'\x00\x00\x00\x00'
'''
0, Python sẽ tăng
# Single Integer Input Argument
print[bytes[]]
print[bytes[2]]
print[bytes[4]]

'''
b''
b'\x00\x00'
b'\x00\x00\x00\x00'
'''
6

Thay vào đó, bạn giải quyết lỗi bằng cách sử dụng một đối tượng

bytearray[[source[, encoding[, errors]]]]
4 — nếu bạn sửa đổi nó bằng cách gán mục, chẳng hạn như
# Single Integer Input Argument
print[bytes[]]
print[bytes[2]]
print[bytes[4]]

'''
b''
b'\x00\x00'
b'\x00\x00\x00\x00'
'''
8, thì lỗi sẽ biến mất

Lý do là không giống như

# Single Integer Input Argument
print[bytes[]]
print[bytes[2]]
print[bytes[4]]

'''
b''
b'\x00\x00'
b'\x00\x00\x00\x00'
'''
0, loại
bytearray[[source[, encoding[, errors]]]]
4 có thể thay đổi

🌍 Hướng dẫn đề xuất. Python Mutable vs Immutable Objects

Hãy tóm tắt lại cả hai chức năng một cách nhanh chóng. Sau đó, chúng tôi sẽ so sánh hiệu suất trong trường hợp bạn thắc mắc cái nào nhanh hơn

byte Python[]

byte Python[]. Hướng dẫn hoàn chỉnh


Xem video này trên YouTube

Hàm

bytearray[[source[, encoding[, errors]]]]
41 tích hợp sẵn của Python tạo một đối tượng
# Single Integer Input Argument
print[bytes[]]
print[bytes[2]]
print[bytes[4]]

'''
b''
b'\x00\x00'
b'\x00\x00\x00\x00'
'''
0 bất biến được khởi tạo như được định nghĩa trong đối số hàm
bytearray[[source[, encoding[, errors]]]]
43

Đối tượng bytes giống như một chuỗi nhưng nó chỉ sử dụng các ký tự byte bao gồm một chuỗi các số nguyên 8 bit trong phạm vi

bytearray[[source[, encoding[, errors]]]]
44

Đối tượng byte được trả về là bất biến—bạn không thể thay đổi nó sau khi tạo. Nếu bạn định thay đổi nội dung, hãy sử dụng phương thức

bytearray[[source[, encoding[, errors]]]]
1 để tạo đối tượng
bytearray[[source[, encoding[, errors]]]]
4 có thể thay đổi

# Single Integer Input Argument
print[bytes[]]
print[bytes[2]]
print[bytes[4]]

'''
b''
b'\x00\x00'
b'\x00\x00\x00\x00'
'''

🌍 Hướng dẫn đề xuất. Chức năng tích hợp Python

bytearray[[source[, encoding[, errors]]]]
2

mảng phụ Python[]

mảng phụ Python[]. Làm cách nào để chuyển đổi danh sách số nguyên thành mảng byte?


Xem video này trên YouTube

Hàm

bytearray[[source[, encoding[, errors]]]]
6 tích hợp sẵn của Python nhận một lần lặp, chẳng hạn như danh sách các số nguyên từ 0 đến 256, chuyển đổi chúng thành byte trong khoảng từ
bytearray[[source[, encoding[, errors]]]]
49 đến
bytearray[[source[, encoding[, errors]]]]
00 và trả về một mảng byte mới dưới dạng lớp
bytearray[[source[, encoding[, errors]]]]
01

bytearray[[source[, encoding[, errors]]]]
4

🌍 Hướng dẫn đề xuất. Python

bytearray[[source[, encoding[, errors]]]]
6 Chức năng tích hợp

Hiệu suất byte[] so với bytearray[]

Tạo một đối tượng lớn

# Single Integer Input Argument
print[bytes[]]
print[bytes[2]]
print[bytes[4]]

'''
b''
b'\x00\x00'
b'\x00\x00\x00\x00'
'''
0 [e. g. , 100 triệu byte] bằng cách sử dụng
bytearray[[source[, encoding[, errors]]]]
2 nhanh hơn so với việc tạo
bytearray[[source[, encoding[, errors]]]]
4 bằng
bytearray[[source[, encoding[, errors]]]]
6 vì khả năng thay đổi của cái sau đi kèm với chi phí hiệu suất

Trong thử nghiệm của chúng tôi khi tạo các đối tượng 100 triệu byte, chúng tôi đã thấy hiệu suất tăng gấp 3 lần khi sử dụng

bytearray[[source[, encoding[, errors]]]]
2 so với
bytearray[[source[, encoding[, errors]]]]
6

Đây là mã của thiết lập thử nghiệm đơn giản

bytearray[[source[, encoding[, errors]]]]
0

Tôi đã chạy thử nghiệm nhiều lần trên Win CPU Intel Core i7 với 8GB RAM và thu được kết quả sau

bytearray[[source[, encoding[, errors]]]]
5

Vì vậy, sự khác biệt là khoảng 3-4 lần về hiệu suất.

bytearray[[source[, encoding[, errors]]]]
2 nhanh hơn 300-400% so với
bytearray[[source[, encoding[, errors]]]]
6

Tuy nhiên, đừng để lợi thế hiệu suất nhỏ bé này đánh lừa bạn

Tốt hơn là bỏ qua thực tế này và tối ưu hóa để dễ đọc và phù hợp với vấn đề hiện tại

  • Bạn có cần thay đổi cấu trúc dữ liệu giữ byte sau khi tạo không?
  • Bạn có tạo cấu trúc dữ liệu một lần và sau đó chỉ đọc thông tin của nó không?

Trong mọi trường hợp, đừng thực hiện tối ưu hóa sớm

👉 Hướng dẫn đề xuất. Tối ưu hóa sớm là gốc rễ của mọi tội lỗi

Đi đâu từ đây?

Cảm ơn bạn đã đọc toàn bộ hướng dẫn—Tôi hy vọng bạn có được một số kiến ​​thức quý giá từ nó

Nếu bạn muốn tiếp tục cải thiện kỹ năng mã hóa của mình và trở thành một chuyên gia Python, hãy xem học viện email miễn phí của chúng tôi. Chúng tôi cũng có cheat sheet

Chris

Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính

Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners [NoStarch 2020], đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới

Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây

Bytearray trong Python là gì?

Trăn. hàm bytearray[] . Nó đưa ra một chuỗi các số nguyên có thể thay đổi trong phạm vi 0

Chủ Đề