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

Tutorial di base Python

Controllo dei flussi Python

Funzione di Python

Tipi di dati di Python

Operazioni di file Python

Oggetti e classi Python

Data e ora Python

Conoscenze avanzate Python

Manuale di riferimento Python

Modo d'uso e esempio di memoryview() in Python

Funzioni incorporate di Python

La funzione memoryview() restituisce un oggetto di vista della memoria per il parametro fornito.

Prima di comprendere cosa sia la vista della memoria, dobbiamo prima comprendere il protocollo di buffer di Python.

Protocollo di buffer Python

Il protocollo di buffer fornisce un metodo per accedere ai dati interni di un oggetto. Questi dati interni sono un array di memoria o un buffer.

Il protocollo di buffer permette a un oggetto di rendere pubblico i propri dati interni (buffer), e a un altro di accedere a questi buffer senza copie intermedie.

Possiamo accedere a questo protocollo solo al livello dell'API C, non possiamo utilizzare la nostra libreria di codice comune.

Pertanto, per rendere pubblico lo stesso protocollo alla libreria di codice Python comune, è necessario utilizzare la vista della memoria.

Cos'è la vista della memoria?

La vista della memoria è un metodo sicuro per rendere pubblico il protocollo di buffer in Python.

Permette di accedere al buffer interno dell'oggetto creando un oggetto di vista della memoria.

Perché il protocollo di buffer e la vista della memoria sono importanti?

Dobbiamo ricordare che ogni volta che eseguiamo alcune operazioni su un oggetto (chiamare funzioni dell'oggetto, tagliare array) Python deve creareoggettodelCopia.

Se dobbiamo gestire grandi quantità di dati (ad esempio, dati binari di immagini), non è necessario creare copie inutili di grandi quantità di dati, che sono quasi inutili.

Utilizzando il protocollo di buffer, possiamo concedere a un altro oggetto l'accesso per utilizzare/modificare dati grandi senza dover copiarli. Questo permette al programma di utilizzare meno memoria e aumenta la velocità di esecuzione.

Sintassi di memoryview() in Python

Per utilizzare il protocollo di buffer pubblico memoryview(), utilizziamo la seguente sintassi:

memoryview(obj)

Parametro memoryview()

La funzione memoryview() accetta un singolo parametro:

  • obj-Oggetto che deve rendere pubblico i propri dati interni. L'oggetto deve supportare il protocollo di buffer.bytes,bytearray)

Valore restituito da memoryview()

La funzione memoryview() restituisce un oggetto vista della memoria.

Esempio 1: Come utilizzare memoryview() in Python?

#bytearray casuale
random_byte_array = bytearray('ABC', 'utf-8')
mv = memoryview(random_byte_array)
# Accediamo all'indice zero della vista della memoria
print(mv[0])
# Creiamo byte dalla vista della memoria
print(bytes(mv[0:2]))
# Creiamo una lista dalla vista della memoria
print(list(mv[0:3]))

Risultato di output

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

qui, partiamo dall'array di byterandom_byte_arrayabbiamo creato un oggetto vista della memoriamv.

Poi, accediamomvall'indice 0, 'A' e lo stampiamo (fornendo il valore ASCII -65).

Allo stesso modo, accediamo da 0 e 1mvall'indice 'AB', e lo convertiamo in byte.

Infine, abbiamo acceduto a tutti gli indici di mv e li abbiamo convertiti in una lista. Poiché l'array di byte interno memorizza i valori ASCII delle lettere, l'output è una lista dei valori ASCII di A, B e C.

Esempio 2: Modificare i dati interni utilizzando la vista della memoria

# bytearray casuale
random_byte_array = bytearray('ABC', 'utf-8')
print('Prima dell'aggiornamento:', random_byte_array)
mv = memoryview(random_byte_array)
# Aggiorniamo il primo indice di mv a Z
mv[1] = 90
print('Dopo l'aggiornamento:', random_byte_array)

Risultato di output

Prima dell'aggiornamento: bytearray(b'ABC')
Dopo l'aggiornamento: bytearray(b'AZC')

qui, aggiorniamo il primo indice della vista della memoria a 90, ossia il valore ASCII Z.

poiché l'oggetto vista della memoriamvsi riferiscono allo stesso buffer/memoria, quindi viene aggiornatomv inl'indice verrà aggiornato ancherandom_byte_array.

Funzioni incorporate di Python