Python memoryview ()

Hàm memoryview () trả về một đối tượng dạng xem bộ nhớ của đối số đã cho.

Trước khi tìm hiểu chế độ xem bộ nhớ là gì, trước tiên chúng ta cần hiểu về giao thức đệm của Python.

Giao thức đệm Python

Giao thức đệm cung cấp một cách để truy cập dữ liệu bên trong của một đối tượng. Dữ liệu bên trong này là một mảng bộ nhớ hoặc một bộ đệm.

Giao thức bộ đệm cho phép một đối tượng để lộ dữ liệu bên trong của nó (bộ đệm) và đối tượng kia truy cập các bộ đệm đó mà không cần sao chép trung gian.

Chúng tôi chỉ có thể truy cập giao thức này ở cấp C-API và không sử dụng cơ sở mã thông thường của chúng tôi.

Vì vậy, để hiển thị cùng một giao thức với cơ sở mã Python bình thường, các chế độ xem bộ nhớ hiện diện.

Chế độ xem bộ nhớ là gì?

Chế độ xem bộ nhớ là một cách an toàn để hiển thị giao thức đệm trong Python.

Nó cho phép bạn truy cập bộ đệm bên trong của một đối tượng bằng cách tạo một đối tượng dạng xem bộ nhớ.

Tại sao giao thức đệm và khung nhìn bộ nhớ lại quan trọng?

Chúng ta cần nhớ rằng bất cứ khi nào chúng ta thực hiện một số hành động trên một đối tượng (gọi một hàm của một đối tượng, cắt một mảng), Python cần tạo một bản sao của đối tượng .

Nếu chúng ta có dữ liệu lớn để làm việc (ví dụ: dữ liệu nhị phân của một hình ảnh), chúng ta sẽ tạo ra các bản sao của các khối dữ liệu khổng lồ một cách không cần thiết, hầu như không được sử dụng.

Sử dụng giao thức đệm, chúng ta có thể cấp cho một đối tượng khác quyền truy cập để sử dụng / sửa đổi dữ liệu lớn mà không cần sao chép nó. Điều này làm cho chương trình sử dụng ít bộ nhớ hơn và tăng tốc độ thực thi.

Cú pháp memoryview () trong Python

Để hiển thị giao thức đệm bằng cách sử dụng memoryview(), chúng tôi sử dụng cú pháp sau:

 memoryview (obj)

thông số memoryview ()

Các memoryview()chức năng phải mất một tham số duy nhất:

  • obj - đối tượng có dữ liệu nội bộ sẽ được tiết lộ. objphải hỗ trợ giao thức đệm (byte, bytearray)

Trả về giá trị từ memoryview ()

Các memoryview()hàm trả về một đối tượng xem bộ nhớ.

Ví dụ 1: Cách memoryview () hoạt động trong Python?

 #random bytearray random_byte_array = bytearray('ABC', 'utf-8') mv = memoryview(random_byte_array) # access memory view's zeroth index print(mv(0)) # create byte from memory view print(bytes(mv(0:2))) # create list from memory view print(list(mv(0:3)))

Đầu ra

 65 b'AB '(65, 66, 67) 

Ở đây, chúng tôi đã tạo một đối tượng xem bộ nhớ mv từ mảng byte random_byte_array.

Sau đó, chúng tôi truy cập chỉ mục thứ 0 của mv 'A'và in nó (cung cấp giá trị ASCII - 65).

Một lần nữa, chúng tôi truy cập các chỉ số của mv từ 0 và 1 'AB', và chuyển đổi chúng thành byte.

Cuối cùng, chúng tôi đã truy cập tất cả các chỉ số của mv và chuyển đổi nó thành một danh sách. Vì nội bộ bytearraylưu trữ giá trị ASCII cho các bảng chữ cái, đầu ra là danh sách các giá trị ASCII của A, B và C.

Ví dụ 2: Sửa đổi dữ liệu nội bộ bằng chế độ xem bộ nhớ

 # random bytearray random_byte_array = bytearray('ABC', 'utf-8') print('Before updation:', random_byte_array) mv = memoryview(random_byte_array) # update 1st index of mv to Z mv(1) = 90 print('After updation:', random_byte_array)

Đầu ra

 Trước khi cập nhật: bytearray (b'ABC ') Sau khi cập nhật: bytearray (b'AZC') 

Ở đây, chúng tôi đã cập nhật chỉ mục đầu tiên của chế độ xem bộ nhớ thành 90, giá trị ASCII của Z.

Vì đối tượng xem bộ nhớ mv tham chiếu đến cùng một bộ đệm / bộ nhớ, việc cập nhật chỉ mục trong mv cũng cập nhật random_byte_array.

thú vị bài viết...