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

Tutorial Básico do Python

Controle de Fluxo do Python

Função do Python

Tipos de dados do Python

Operações de Arquivos do Python

Objetos e Classes do Python

Data e Hora do Python

Conhecimento Avançado do Python

Manual de Referência do Python

Uso e exemplo do memoryview() do Python

Funções integradas do Python

A função memoryview() retorna um objeto de visão de memória para o parâmetro fornecido.

Antes de entender o que é visão de memória, precisamos primeiro entender o protocolo de buffer do Python.

Protocolo de buffer do Python

O protocolo de buffer fornece um método para acessar os dados internos do objeto. Os dados internos são uma matriz de memória ou buffer.

O protocolo de buffer permite que um objeto divulgue seus dados internos (buffer) e outro acesse esses buffers sem cópia intermediária.

Somente em C-Acesso ao protocolo neste nível de API, mas não podemos usar nossa biblioteca de código comum.

Portanto, para tornar o mesmo protocolo público para a biblioteca de código Python comum, é necessário usar a visão de memória.

O que é visão de memória?

A visão de memória é um método seguro de protocolo de buffer público no Python.

Ele permite que você acesse o buffer interno do objeto criando um objeto de visão de memória.

Por que o protocolo de buffer e a visão de memória são importantes?

Precisamos lembrar de que, sempre que realizarmos algumas operações no objeto (chamadas de funções do objeto, fatiamento de arrays), o Python precisa criarobjetodoCópia.

Se precisarmos lidar com grandes quantidades de dados (por exemplo, dados binários de imagens), não é necessário criar cópias desnecessárias de grandes quantidades de dados, o que é praticamente inútil.

Usando o protocolo de buffer, podemos conceder ao outro objeto acesso para usar/Modifique grandes dados sem copiá-los. Isso faz com que o programa use menos memória e aumente a velocidade de execução.

Sintaxe do memoryview() do Python

Para usar o protocolo de buffer público memoryview(), usamos a seguinte sintaxe:

memoryview(obj)

Parâmetros da função memoryview()

A função memoryview() aceita um único parâmetro:

  • obj-para tornar público seu dados internos. obj deve suportar o protocolo de buffer.bytes,bytearray)

Retorno da função memoryview()

A função memoryview() retorna um objeto de visão de memória.

Exemplo1:Como usar memoryview() no Python?

#bytearray aleatório
random_byte_array = bytearray('ABC', 'utf)-8)
mv = memoryview(random_byte_array)
# Acessar o primeiro índice da visão de memória
print(mv[0)
# Criar bytes a partir da visão de memória
print(bytes(mv[0:2))
# Criar lista a partir da visão de memória
print(list(mv[0:3))

Resultados de saída

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

Aqui, a partir do array de bytesrandom_byte_arrayCriou um objeto de visão de memóriamv.

Depois disso, acessamosmvdo índice 0, 'A' e imprime (fornece o valor ASCII-65)

Da mesma forma, a partir de 0 e1 acessarmvdo índice 'AB', e convertê-lo em bytes.

Por fim, acessamos todos os índices de mv e os convertimos em uma lista. Como o array interno de bytes armazena os valores ASCII das letras, a saída é uma lista com os valores ASCII de A, B e C.

Exemplo2:Usar visão de memória para modificar dados internos

# bytearray aleatório
random_byte_array = bytearray('ABC', 'utf)-8)
print('Antes da atualização:', random_byte_array)
mv = memoryview(random_byte_array)
# Atualizar o primeiro índice de mv para Z
mv[1] = 90
print('Atualizado:', random_byte_array)

Resultados de saída

Antes da atualização: bytearray(b'ABC')
Atualizado: bytearray(b'AZC')

Aqui, atualizamos o primeiro índice da visão de memória para90, ou seja, o valor ASCII Z.

devido ao objeto de visão de memóriamvreferenciando o mesmo buffer/memória, portanto, atualizarmv detambém será atualizadorandom_byte_array.

Funções integradas do Python