4
respostas

O statement With

Olá! Fiquei na dúvida com esse trecho do código

with coluna1:
    st.metric('Receita', formata_numero(dados['Preço'].sum(), 'R$'))
with coluna2:
    st.metric('Quantidade de vendas', formata_numero(dados.shape[0]))

O que seria a instrução with no Python?

Obrigado

4 respostas

Olá Alejandro, tudo bem com você?

A instrução with no Python é usada para gerenciar recursos. Ela é comumente usada quando trabalhamos com arquivos, conexões de banco de dados, entre outros, onde precisamos garantir que os recursos sejam liberados corretamente depois de usá-los, independentemente de ocorrerem erros durante o uso.

Exemplo prático de como a instrução with é usada ao trabalhar com arquivos:

with open('arquivo.txt', 'r') as arquivo:
    conteudo = arquivo.read()

Neste exemplo, o arquivo é aberto, lido e depois fechado automaticamente quando o bloco de código dentro do with é concluído. Isso é útil porque garante que o arquivo seja fechado corretamente, mesmo que ocorra um erro durante a leitura do arquivo.

Já no código da aula, a instrução with está sendo usada para definir o escopo que um objeto vai ter. Neste caso, with coluna1: e with coluna2: estão sendo usados para definir onde os widgets do Streamlit (neste caso, o st.metric) serão colocados no layout do aplicativo.

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Oi Rafael , agradeço pela atenção.

Eu já usei a instrução with para abertura de arquivos para gerenciar os recursos.

Se eu entendi a sua resposta Rafael, a instrução with do Python também é utilizado para definir o escopo que um objeto vai ter. Poderia dar um outro exemplo desse mesmo caso?

Obrigado

Boa noite Alejandro!

Exatamente, você entendeu da forma correta. A instrução with não apenas gerencia recursos, mas também pode ser usada para definir o escopo que um objeto terá. Ou seja, ela define um bloco de código dentro do qual o objeto está ativo e disponível. O objeto deixa de existir fora do bloco with, liberando memória e evitando efeitos colaterais em outras partes do código.

Voltando ao exemplo do arquivo, dentro do bloco with, podemos ler o conteúdo do documento. Porém, quando o bloco with é concluído e o arquivo é automaticamente fechado, a variável deixa de existir fora do bloco with.

# Abrindo e lendo um arquivo usando with
with open("arquivo.txt", "r") as arquivo:
    conteudo = arquivo.read()
    print(conteudo)

# Tentando acessar o arquivo fora do bloco with
# Isso gerará um erro, pois o objeto 'arquivo' não está mais disponível
# arquivo.read()

Assim como nos arquivos, no Streamlit não é diferente, ele usa o with para gerenciar o contexto da execução de elementos da interface para garantir que os elementos sejam exibidos corretamente e atualizados conforme necessário, além de liberar recursos de forma apropriada quando não são mais necessários.

Pode parecer um pouco complexo à primeira vista, mas, com a prática isso ficará cada vez mais claro.

Espero ter ajudado. Fico à disposição.

Abraços e bons estudos!

Agradeço pela atenção Rafael.

Estudei mais sobre esse assunto sobre o statement with e with .. as. Estão relacionados com o conceito de Context Manager.

Obrigado