Làm thế nào về cách Python 3 'MemoryView'.memoryview' way.
MemoryView là một loại mớ hỗn độn của các mô -đun byte/bytearray và struct, với một số lợi ích.
- Không giới hạn ở chỉ văn bản và byte, xử lý các từ 16 và 32 bit nữa
- Đối phó với sự cố gắng
- Cung cấp giao diện chi phí rất thấp cho các chức năng và dữ liệu C/C ++ được liên kết
Ví dụ đơn giản nhất, cho một mảng byte:
memoryview[b"some bytes"].tolist[]
[115, 111, 109, 101, 32, 98, 121, 116, 101, 115]
Hoặc cho một chuỗi unicode, [được chuyển đổi thành mảng byte]
memoryview[bytes["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020", "UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
#Another way to do the same
memoryview["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020".encode["UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
Có lẽ bạn cần từ ngữ hơn là byte?
memoryview[bytes["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020", "UTF-16"]].cast["H"].tolist[]
[65279, 117, 110, 105, 99, 111, 100, 101, 32]
memoryview[b"some more data"].cast["L"].tolist[]
[1701670771, 1869422624, 538994034, 1635017060]
Lời cảnh báo. Hãy cẩn thận với nhiều cách giải thích về thứ tự byte với dữ liệu của nhiều hơn một byte: Be careful of multiple interpretations of byte order with data of more than one byte:
txt = "\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020"
for order in ["", "BE", "LE"]:
mv = memoryview[bytes[txt, f"UTF-16{order}"]]
print[mv.cast["H"].tolist[]]
[65279, 117, 110, 105, 99, 111, 100, 101, 32]
[29952, 28160, 26880, 25344, 28416, 25600, 25856, 8192]
[117, 110, 105, 99, 111, 100, 101, 32]
Không chắc đó là cố ý hay một lỗi nhưng nó đã bắt gặp tôi !!
Ví dụ đã sử dụng UTF-16, để biết danh sách đầy đủ các codec, hãy xem sổ đăng ký codec trong Python 3.10
Trong hướng dẫn này, chúng tôi sẽ tìm hiểu về phương thức python byte [] với sự trợ giúp của các ví dụ.
Phương pháp
memoryview[bytes["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020", "UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
#Another way to do the same
memoryview["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020".encode["UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
3 trả về một đối tượng byte bất biến được khởi tạo với kích thước và dữ liệu đã cho.Thí dụ
message = 'Python is fun'
# convert string to bytes
byte_message = bytes[message, 'utf-8']
print[byte_message]
# Output: b'Python is fun'
Byte [] cú pháp
Phương pháp cú pháp của phương pháp
memoryview[bytes["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020", "UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
#Another way to do the same
memoryview["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020".encode["UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
3 là:bytes[[source[, encoding[, errors]]]]
Phương thức
memoryview[bytes["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020", "UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
#Another way to do the same
memoryview["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020".encode["UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
3 Trả về một đối tượng byte là chuỗi số nguyên bất biến [không thể sửa đổi] trong phạm vi memoryview[bytes["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020", "UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
#Another way to do the same
memoryview["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020".encode["UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
6.Nếu bạn muốn sử dụng phiên bản có thể thay đổi, hãy sử dụng phương thức bytearray [].
tham số byte []
memoryview[bytes["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020", "UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
#Another way to do the same
memoryview["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020".encode["UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
3 lấy ba tham số tùy chọn:- Nguồn [Tùy chọn] - Nguồn để khởi tạo mảng byte. - source to initialize the array of bytes.
- Mã hóa [tùy chọn] - Nếu nguồn là một chuỗi, mã hóa chuỗi. - if the source is a string, the encoding of the string.
- 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] - if the source is a string, the action to take when the encoding conversion fails [Read more: String encoding]
Tham số nguồn có thể được sử dụng để khởi tạo mảng byte theo các cách sau:source parameter can be used to initialize the byte array in the following ways:
Sợi dây | Chuyển đổi chuỗi thành byte bằng str.encode [] cũng phải cung cấp mã hóa và lỗi tùy chọnencoding and optionally errors |
Số nguyên | Tạo một mảng có kích thước được cung cấp, tất cả được khởi tạo thành null |
Sự vật | Bộ đệm chỉ đọc của đối tượng sẽ được sử dụng để khởi tạo mảng byte |
Có thể lặp lại | Tạo một mảng có kích thước bằng với số lượng ITEBER và được khởi tạo thành các phần tử có thể lặp lại phải có thể lặp lại của số nguyên giữa 8 |
Không có nguồn [đối số] | Tạo một mảng có kích thước 0 |
byte [] giá trị trả về
Phương thức
memoryview[bytes["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020", "UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
#Another way to do the same
memoryview["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020".encode["UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
3 trả về đối tượng byte của kích thước và giá trị khởi tạo đã cho.Ví dụ 1: Chuyển đổi chuỗi thành byte
string = "Python is interesting."
# string with encoding 'utf-8'
arr = bytes[string, 'utf-8']
print[arr]
Đầu ra
b'Python is interesting.'
Ví dụ 2: Tạo một byte có kích thước số nguyên đã cho
size = 5
arr = bytes[size]
print[arr]
Đầu ra
b'\x00\x00\x00\x00\x00'
Ví dụ 3: Chuyển đổi danh sách có thể lặp lại thành byte
memoryview[bytes["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020", "UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
#Another way to do the same
memoryview["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020".encode["UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
0Đầu ra
memoryview[bytes["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020", "UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
#Another way to do the same
memoryview["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020".encode["UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
1 Đội câu trả lời giáo dục
Đối tượng byte là một chuỗi các byte. Các đối tượng byte này có thể đọc được máy và có thể được lưu trữ trực tiếp trên đĩa. Các chuỗi, mặt khác, ở dạng người có thể đọc được và cần được mã hóa để chúng có thể được lưu trữ trên một đĩa.byte object is a sequence of bytes. These byte objects are machine-readable and can be directly stored on the disk. Strings, on the other hand, are in human-readable form and need to be encoded so that they can be stored on a disk.
Có một số loại mã hóa khác nhau có thể ánh xạ văn bản vào đĩa. Những cái phổ biến nhất là các kỹ thuật mã hóa ASCII và UTF-8.
Chuyển đổi chuỗi thành byte
Chúng ta có thể sử dụng lớp
memoryview[bytes["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020", "UTF-16"]].cast["H"].tolist[]
[65279, 117, 110, 105, 99, 111, 100, 101, 32]
memoryview[b"some more data"].cast["L"].tolist[]
[1701670771, 1869422624, 538994034, 1635017060]
0 tích hợp trong Python để chuyển đổi chuỗi thành byte: chỉ cần chuyển chuỗi làm đầu vào đầu tiên của hàm tạo của lớp byte và sau đó chuyển mã hóa làm đối số thứ hai.In đối tượng hiển thị một biểu diễn văn bản thân thiện với người dùng, nhưng dữ liệu có trong đó là trong byte.
memoryview[bytes["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020", "UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
#Another way to do the same
memoryview["\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020".encode["UTF-16"]].tolist[]
[255, 254, 117, 0, 110, 0, 105, 0, 99, 0, 111, 0, 100, 0, 101, 0, 32, 0]
2THẺ LIÊN QUAN
Python
dây
Byte
đổi
Bản quyền © 2022 Giáo dục, Inc. Tất cả quyền được bảo lưu