English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriel de base Python

Contrôle de flux Python

Fonctions en Python

Types de données en Python

Opérations sur les fichiers Python

Objets et classes Python

Dates et heures Python

Connaissances avancées Python

Manuel de référence Python

Utilisation et exemples de la fonction memoryview() en Python

Python built-in functions

La fonction memoryview() retourne un objet de vue en mémoire pour le paramètre donné.

Avant de comprendre ce qu'est la vue en mémoire, nous devons d'abord comprendre le protocole de tampon de Python.

Protocole de tampon Python

Le protocole de tampon fournit une méthode pour accéder aux données internes d'un objet. Les données internes sont un tableau de mémoire ou un tampon.

Le protocole de tampon permet à un objet de rendre public ses données internes (tampon), et un autre peut accéder à ces tampons sans copie intermédiaire.

Nous ne pouvons que dans C-Accéder à ce protocole au niveau API, sans utiliser notre bibliothèque de code conventionnelle.

Par conséquent, pour rendre le même protocole public pour les bibliothèques de code Python normales, il est nécessaire d'utiliser la vue en mémoire.

Qu'est-ce que la vue en mémoire ?

La vue en mémoire est une méthode sécurisée pour le protocole de tampon public en Python.

Il vous permet d'accéder au tampon interne de l'objet en créant un objet de vue en mémoire.

Pourquoi le protocole de tampon et la vue en mémoire sont-ils importants ?

Nous devons nous souvenir que chaque fois que nous exécutons certaines opérations sur un objet (appeler une fonction de l'objet, couper un tableau), Python doit créerl'objetdeCopie.

Si nous devons traiter de grandes quantités de données (par exemple, les données binaires d'une image), il n'est pas nécessaire de créer des copies inutiles de grandes quantités de données, ce qui est presque inutile.

En utilisant le protocole de tampon, nous pouvons accorder un accès à un autre objet pour utiliser/Modifier de grandes données sans les copier. Cela permet aux programmes d'utiliser moins de mémoire et d'accélérer les performances.

Syntaxe de memoryview() en Python

Pour utiliser le protocole de b缓冲 memoryview(), nous utilisons la syntaxe suivante :

memoryview(obj)

Paramètres de memoryview()

La fonction memoryview() utilise un seul paramètre :

  • obj-to publicly expose its internal data. The object must support the buffer protocolbytes,bytearray)

memoryview() return value

The memoryview() function returns a memory view object.

Example1:How to use memoryview() in Python?

#Random bytearray
random_byte_array = bytearray('ABC', 'utf)-8)
mv = memoryview(random_byte_array)
# Access the zeroth index of memory view
print(mv[0])
# Create bytes from memory view
print(bytes(mv[0:2))
# Create a list from memory view
print(list(mv[0:3))

Output result

65
b'AB'
[65, 66, 67]

Here, we take the byte arrayrandom_byte_arraycreated a memory view objectmv.

Then, we accessmvthe 0th index, 'A' and print it (giving the ASCII value-65)

Similarly, we start from 0 and1 Accessmvof the index 'AB', and convert it to bytes.

Finally, we accessed all the indices of mv and converted them to a list. Since the internal byte array stores the ASCII values of letters, the output is a list of ASCII values of A, B, and C.

Example2:Using memory view to modify internal data

# Random bytearray
random_byte_array = bytearray('ABC', 'utf)-8)
print('Before update:', random_byte_array)
mv = memoryview(random_byte_array)
# Update the first index of mv to Z
mv[1] = 90
print('After update:', random_byte_array)

Output result

Before update: bytearray(b'ABC')
After update: bytearray(b'AZC')

Here, we update the first index of the memory view to90, that is, the ASCII value Z.

due to the memory view objectmvreference the same buffer/memory, so updatemv inthe index will also be updatedrandom_byte_array.

Python built-in functions