2.18. Usando módulos

Um módulo é uma coleção de código Python – funções, classes, constantes – empacotada para que possa ser reutilizada em muitos scripts. O Python vem com uma biblioteca padrão cheia deles, e o firmware da OpenMV adiciona mais para se comunicar com a câmera. Acessar um módulo é feito com import.

2.18.1. import

A forma mais direta traz o módulo inteiro sob seu próprio nome:

import math

print(math.sqrt(2))

Saída:

1.4142135623730951

Após o import, todo nome definido por math fica acessível como math.<name>. O nome do módulo vem de seu nome de arquivo (sem .py); o prefixo de namespace evita que dois módulos com o mesmo nome de função colidam.

2.18.2. from … import

Para trazer nomes específicos diretamente para o escopo atual, use from:

from math import sqrt, pi

print(sqrt(2), pi)

Saída:

1.4142135623730951 3.141592653589793

Não há mais prefixo de namespace. Isso é conveniente para nomes usados com frequência, mas um import com from que traz muitos nomes torna mais difícil dizer de onde cada nome veio. Um simples import math geralmente é mais claro em scripts maiores.

A forma com estrela from math import * traz tudo que o módulo exporta. Evite-a – ela polui o namespace e atrapalha o autocompletar da IDE.

2.18.3. Apelidando com as

Nomes de módulos longos podem ser encurtados com as:

import json as j

j.dumps({"ok": True})

O mesmo truque funciona em nomes individuais importados com from:

from math import sqrt as root

root(9)              # 3.0

Para código Python em geral, crie apelidos apenas quando o nome original for genuinamente longo ou colidir com algo que já está no escopo.

2.18.4. Módulos disponíveis

A referência da biblioteca lista todo módulo presente na câmera – a biblioteca padrão do MicroPython e os módulos específicos da OpenMV que controlam o sensor de imagem, executam visão de máquina e controlam o hardware embarcado. Todos eles usam o mesmo mecanismo de import mostrado acima.