• Home

    Escolha seu Plano

    Carreiras Alura

    Evolua com profundidade técnica, direção clara e aplicação prática.

    Jornadas guiadas do básico ao avançado com checkpoints práticos, desenhadas para quem busca profundidade e protagonismo técnico.

    Iniciante

    Comece do zero com uma trilha clara e progressiva.

    Fundamentos práticos para dar os primeiros passos com segurança e construir uma base sólida.

    Intermediário

    Continue sua evolução com cursos que conectam fundamentos, ferramentas e prática profissional. Ganhe autonomia, e avance para projetos mais completos.

    Avançado

    Aprofunde temas técnicos e estratégicos para enfrentar desafios mais complexos. Explore boas práticas, arquitetura, performance com visão profissional.

    Cursos

    Ver mais cursos de Back-end
    • Pensamento computacional: fundamentos da computação e lógica de programação
    • Lógica de programação: mergulhe em programação com JavaScript
    • DDD: fundamentos do design orientado a domínio
    • ASP.NET: autenticação e autorização em APIs e aplicações web
    • Microsserviços: migração de monólitos e modularização

    Cursos

    Ver mais cursos de Dados
    • Python para Dados: primeiros passos
    • Excel: domine o editor de planilhas
    • Engenharia de Dados: Orquestração de Pipelines com Apache Airflow
    • Power BI Desktop: construindo meu primeiro dashboard
    • Governança e Arquitetura de Dados

    Cursos

    Ver mais cursos de Inteligência Artificial
    • IA: Explorando o Potencial da Inteligência Artificial Generativa
    • Engenharia de Prompt: Criando Prompts Eficazes para IA Generativa
    • Claude para Análise de Dados: prompts, integrações e automações
    • Agno: criando agentes e sistemas multiagente
    • Engenharia de software na era da IA: segurança de aplicações com agentes, MCPs e código gerado por IA

    Cursos

    Ver mais cursos de Front-end
    • HTML e CSS: ambiente, estrutura e estilo
    • React: realizando testes avançados com Jest e Testing Library
    • React: integrando TypeScript em projetos
    • JavaScript: aprendendo a programar
    • React: aplicando arquiteturas de Micro frontends

    Cursos

    Ver mais cursos de DevOps
    • Sistema Operacional Linux: fundamentos e administração prática
    • Containers e Docker: empacotamento, isolamento e gestão
    • Redes: dos conceitos iniciais à criação de uma intranet
    • Linux: gerenciando diretórios, arquivos, permissões e processos
    • Cibersegurança: Fundamentos e práticas integradas

    Cursos

    Ver mais cursos de UX & Design
    • UX Research: mapeando a experiência da pessoa usuária
    • UX/UI Design: Entregando produtos digitais com IA
    • UI Design: Prototipação e animações interativas
    • Figma: Conhecendo o programa
    • Product Design: métricas e ciclo de vida do produto

    Cursos

    Ver mais cursos de Gestão & Negócios
    • Canva: Criação de landing pages e e-mail marketing
    • Agilidade: como ela pode ajudar a criar um time de alta performance
    • Google Analytics 4: Extrair insights e configurar eventos
    • Management 3.0: gerencie o ambiente, não as pessoas
    • Automação de processos com n8n: Inteligência de dados para Marketing

    Cursos

    Ver mais cursos de Mobile
    • React Native: Estilização e Layouts com Flexbox e StyleSheet
    • Flutter: Graphql e suporte offline
    • Android com Gemini: Trabalhando com textos e imagens na IA
    • Dart: trabalhando com orientação a objetos
    • React Native: Dominando Listas com FlatList e ScrollView

    Carreiras

    Ver mais carreiras
    • Especialista em IA
    • Engenharia de IA
    • Ai native software engineering
    • Arquitetura de Soluções com IA
    • AI Product Design
    • Engenharia de Machine Learning
    • Desenvolvimento Front-End React
    • Engenharia de Dados
    • Cloud Security
    • Social Media Marketing
    • Engenharia de Agentes de IA

    Cursos

    • Engenharia de Prompt: Prompts Eficazes para IA Generativa
    • Claude Code: Criando sua Primeira Aplicação
    • Python: Crie sua Primeira Aplicação
    • Git e GitHub: Compartilhando e Colaborando
    • N8N: Fluxos de Trabalho Avançados

    Cursos

    • Copilot Studio: Solução Multiagentes
    • Padrões de API HTTP e Modelagem de APIs
    • Python para Análise de Dados com SQL
    • Docker: Criando e Gerenciando Containers
    • Design com IA: Otimizando o Processo Criativo

    Cursos

    • Model Context Protocol (MCP)
    • Spec-Driven Development: Dev Assistido por Agentes
    • Arquitetura de Sistemas Distribuídos com Java
    • Governança de Modelos e Reprodutibilidade
    • Pentest: Vulnerabilidades em Aplicações Web

    Escolha seu Plano

    Skills & Go

    O Skills & Go é para Tech Leads, Product Managers, estrategistas e early adopters que transformam ideias em soluções de alto impacto. Em cursos ao vivo e 100% online, você domina a nova era da IA em tempo real.

    Aulas ao vivo

    Saiba mais
    • Agentic Engineering: orquestre múltiplos agentes com confiabilidade
    • Building AI Products: transforme ideias em produtos reais com IA
    • AI Data Strategy: transforme dados em decisões estratégicas com IA

    Escolha seu Plano

    Eventos Alura

    Nossos eventos são pensados para quem quer estar à frente das mudanças em tecnologia, IA e inovação. Em experiências presenciais, você acompanha tendências e se conecta com especialistas que estão moldando o futuro.

    Próximos eventos

    • Imersão Engenharia de Software: Dev na Era da IA
    • IA Conference
    • Alura Signals
  • Talent Lab
  • IA

    Escolha seu Plano

    Conteúdos gratuitos

    Explore conteúdos gratuitos para aprender tecnologia no seu ritmo. Encontre artigos com conteúdos técnicos para aprender na prática, notícias para acompanhar as principais tendências do mercado e o Alura Labs, com análises e reflexões de especialistas sobre tecnologia, IA e carreira.

    Conteúdos gratuitos

    • Artigos
    • Notícias
    • Alura Labs
  • Para Empresas
Ver planos
Links principais
  • Planos e Promoções
  • Links complementares do menu mobile
  • Talent lab
  • Inteligência Artificial
  • Pós Graduações
  • Para Empresas
  • Sobre a Alura
  • Grupo Alun
  • Entrar
    • Home
    • Carreiras
    • Skills & Go
    • Talent Lab
    • Inteligência Artificial
    • Pós Graduações
    • Artigos
    • Sobre a Alura
    • Grupo Alun
    LoginContato
    • LinkedIn
    • Instagram
    • YouTube
    1. Página inicial
    2. Back-end
    3. Entendendo o desempacotamento no Python

    Entendendo o desempacotamento no Python

    7 min7 minutos de leitura

    7 min7 minutos de leitura

    Publicado: 14/11/2018

    1. Desembrulhando nossa lista
    2. A expressão estrelada
    3. Os parâmetros das funções
    4. Para saber mais

    Quando estamos programando é bem comum termos listas de dados, listas de tarefas, de produtos, de clientes... No dia a dia nós fazemos muitas operações que envolvem listas.

    Em uma parte de um programa que estou trabalhando, preciso pegar o nome e o sobrenome de alguns alunos cadastrados no banco de dados. Para isso, existe uma função que nos retorna o nome e o sobrenome de um aluno dado um id:

    
    >>> aluno = busca_aluno(9)
    >>> aluno
    ['Yuri', 'Oliveira']
    

    Eu quero mostrar para o usuário uma mensagem de bem-vindo quando ele acessar o sistema:

    
    >>> print('Bem-vindo {}'.format(aluno[0]))
    Bem-vindo Yuri
    

    Legal! Conseguimos imprimir nossa mensagem! Mas o que significa aluno[0]? O login? O nome do usuário? O sobrenome?

    Veja que o nosso código não tem muita semântica, isto é, quando alguém for ler nosso código, ou nós mesmos no futuro, não saberemos o que aluno[0] significa só de olhar o código. Claro, nós podemos atribuir aluno[0] a uma variável:

    
    >>> nome = aluno[0]
    >>> nome
    'Yuri'
    

    Mas, mesmo assim, a legibilidade do código fica um pouco prejudicada. O que tem dentro da lista aluno? Um nome e sobrenome, uma lista de nome de vários alunos e estamos pegando só o primeiro’?

    Veja que mesmo nesse caso, nós precisamos parar e interpretar o código, já que a leitura não está tão fluida. Hoje sabemos que a função busca_aluno nos retorna o nome e o sobrenome, mas e amanhã? Talvez, quando nós, ou outra pessoa, no futuro olhar a variável aluno não vai saber o que ela significa de fato.

    Como nós podemos resolver isso já que nossa função busca_aluno nos retorna uma lista com o nome e sobrenome do aluno?

    Desembrulhando nossa lista

    Nossa função busca_aluno já nos retorna o nome e o sobrenome de um aluno. Então se fizermos algo assim será que funciona?

    
    >>> nome, sobrenome = busca_aluno(9)
    

    Em muitas linguagens de programação, esse código não funciona, mas em Python sim! Com esse código, estamos querendo dizer para o Python pegar o primeiro valor da lista e colocar na nossa variável nome e o segundo valor na variável sobrenome:

    
    >>> nome
    'Yuri'
    >>> sobrenome
    'Oliveira'
    

    Nossa função retorna uma lista com dois elementos, nome e sobrenome, mas e se tivéssemos uma lista com mais valores? Por exemplo, se tivéssemos uma lista com dez números e queremos pegar os dois primeiros, precisaríamos declarar dez variáveis? Uma para cada elemento da lista?

    Bem, nós só queremos os dois primeiros números então talvez nós possamos declarar só duas variáveis.

    
    >>> numeros = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> x, y = numeros
    

    E quando nós executarmos nosso código, teremos um erro:

    Um erro de valor. Ele diz que temos muitos valores para desempacotar. Desempacotamento é o nome dessa técnica no Python. Neste caso, o erro nos diz que temos muitos valores para desempacotar, isto é, temos mais valores na nossa lista do que variáveis para atribuí-las.

    Isso significa que precisamos mesmo declarar dez variáveis?

    Banner do Guia Tático Alura sobre carreira em tecnologia, destacando o mapa da carreira tech. A imagem convida a explorar diferentes caminhos profissionais, comparar possibilidades e encontrar a próxima fase da carreira na área de tecnologia, com chamada “Explore o mapa”.

    A expressão estrelada

    Neste caso, nós queremos pegar os primeiros valores da lista e deixar o restante, ou seja, queremos uma variável para o primeiro elemento, uma para o segundo e uma para o restante:

    
    >>> x, y, *restante = numeros
    >>> x
    0
    >>> y
    1
    >>> restante
    [2, 3, 4, 5, 6, 7, 8, 9]
    

    Veja que antes da última variável colocamos um asterisco. Com isso estamos dizendo ao Python que nossa variável restante receberá os elementos restantes da lista. Essa expressão é conhecida como starred expression.

    Podemos passar essa expressão em qualquer lugar da nossa atribuição. Por exemplo, se queremos pegar os dois primeiros elementos da lista usamos uma expressão parecida com a anterior, mas e se quisermos pegar os dois últimos elementos?

    Neste caso, basta colocar a starred expression no começo:

    
    >>> *restante, x, y = numeros
    >>> x
    8
    >>> y
    9
    >>> restante
    [0, 1, 2, 3, 4, 5, 6, 7]
    

    E também podemos colocar a starred expression no meio, dessa forma, nossa primeira variável terá o primeiro valor da lista, e a última variável terá o último valor da lista:

    
    >>> x, *restante, y = numeros
    >>> x
    0
    >>> y
    9
    >>> restante
    [1, 2, 3, 4, 5, 6, 7, 8]
    

    Além de listas, nós podemos desempacotar tuplas, dicionários e outros itens. No caso o dicionário retornará suas chaves.

    Essa é uma forma de desempacotamento com o Python, será que existem outras?

    Os parâmetros das funções

    Além de desempacotar valores para atribuirmos em variáveis, nós podemos desempacotá-los para atribuir valores a parâmetros de funções.

    Por exemplo, temos uma função que, passado dois números, nos retorna o maior valor:

    
    def maior(num1, num2):
        if num1 > num2:
            return num1
        return num2
    

    E temos uma lista com dois valores que queremos passar como parâmetros da função. Nós podemos passar esses valores passando a posição deles na lista:

    
    >>> numeros = [4, 9]
    >>> maior_numero = maior(numeros[0], numeros[1])
    >>> print(maior_numero)
    9
    

    Ou então, podemos desempacotar esses valores:

    
    >>> numeros = [4, 9]
    >>> maior_numero = maior(*numeros)
    >>> print(maior_numero)
    9
    

    Nesse caso, o asterisco indica para o Python que o primeiro valor da nossa lista será passado como primeiro parâmetro e o segundo valor da nossa lista será passado com segundo parâmetro.

    No caso de passar essa expressão em chamadas de funções, devemos nos atentar para que nossa lista não tenha elementos a menos, ou a mais, dos parâmetros da função, porque, se tiver, causará uma exceção:

    
    >>> numeros = [4, 9, 27]
    >>> maior_numero = maior(*numeros)
    

    Nesse caso, o erro nos diz que a função maior só recebe dois parâmetros posicionais e nós estamos tentando passar três.

    Para saber mais

    Nós também podemos desempacotar tuplas e dicionários nos parâmetros das funções. No caso dos dicionários, o desempacotamento gera parâmetros nomeados. Ou seja, as chaves do dicionário identificam o parâmetro e o valor do dicionário identifica o valor do parâmetro.

    Por exemplo, temos uma função escreve_mensagem que recebe uma mensagem e um nome:

    
    def escreve_mensagem(mensagem, nome):
        print(f'{mensagem}, {nome}')
    

    Essa forma e formatar strings está disponível a partir da versão 3.6 do Python. Nela, podemos passar as variáveis, ou outras expressões diretamente na string, basta utilizar a letra f antes das aspas e colocar as variáveis entre chaves. Isso é chamado de f-strings

    Nós podemos ter um dicionário com as chaves mensagem e nome e passar para a nossa função desempacotando-o:

    
    >>> mensagem = {'mensagem': 'Bem-vindo', 'nome': 'Yuri'}
    >>> escreve_mensagem(**mensagem)
    Bem-vindo, Yuri
    

    Perceba que nesse caso, estamos passando dois asteriscos, pois estamos desempacotando um dicionário. Com essa expressão estamos dizendo ao Python que os parâmetros mensagem e nome da nossa função, vão receber os mesmos valores das chaves mensagem e nome do nosso dicionário.

    Veja que no caso da nossa função busca_aluno sempre nos retorna o sobrenome do aluno que precisa ser atribuído em uma variável para o desempacotamento funcionar.

    Mas nós não estamos utilizando o sobrenome ainda e er uma variável no sistema que não utilizamos ocupa um espaço desnecessário na memória.

    E se a gente falasse para o Python ignorar (_) segundo valor da lista, isto é, ignorar o sobrenome?

    
    >>> nome, _= busca_aluno(9)
    >>> nome
    'Yuri'
    

    Com o operador _ estamos falando para o Python ignorar o segundo valor da lista. Com isso temos apenas a variável nome. Esse operador pode ser usado em conjunto com a starred expression:

    
    >>> numeros = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> x, y, *_ = numeros
    >>> x
    0
    >>> y
    1
    

    E aí, o que achou dessa forma de desempacotar dados com o Python?

    O Python se tornou uma linguagem muito utilizada pelos desenvolvedores. Por ter uma curva de aprendizado baixa e uma sintaxe amigável, ela ganhou muito espaço tanto com as pessoas que estão começando a programar quanto com os programadores mais experientes.

    Aqui na Alura, temos uma vários cursos sobre Python, nela você aprenderá a sintaxe da linguagem, como criar funções e classes, conceitos como encapsulamento, até padrões de projeto, e frameworks web, como Flask e Django.

    Banner do Guia Tático Alura sobre carreira em tecnologia, destacando o mapa da carreira tech. A imagem convida a explorar diferentes caminhos profissionais, comparar possibilidades e encontrar a próxima fase da carreira na área de tecnologia, com chamada “Explore o mapa”.

    Avalie este artigo

    • Foto de Yuri Matheus

      Autor(a)

      Yuri Matheus

      Yuri é desenvolvedor e instrutor. É estudante de Sistemas de Informação na FIAP e formado como Técnico em Informática no Senac SP. O seu foco é nas plataformas Java e Python e em outras áreas como Arquitetura de Software e Machine Learning. Yuri também atua como editor de conteúdo no blog da Alura, onde escreve, principalmente, sobre Redes, Docker, Linux, Java e Python.

    Explore por tópico

    • Back-end
    • Dados
    • DevOps
    • Front-end
    • Gestão & Negócios
    • Institucionais
    • Inteligência Artificial
    • Mobile
    • UX & Design

    Leia também

    • 13/06/2017

      Trabalhando com arquivos e diretórios no python

      Ler mais
    • 26/12/2022

      Namespaces: como evitar conflitos no código em JavaScript

      Ler mais
    • 06/02/2023

      Arquitetura do Node.js: entenda o loop de eventos

      Ler mais
    Ver mais conteúdos

    Inscreva-se em nossa Newsletter

    Fique por dentro de conteúdos, insights e oportunidades do universo tech. Receba novidades e lançamentos direto no seu e-mail.

    Institucional

    • Sobre nós
    • Trabalhe Conosco
    • Para Empresas
    • Para Escolas
    • Política de Privacidade
    • Compromisso de Integridade
    • Termos de Uso
    • Canal de Ética
    • Código de Ética
    • Fale Conosco
    • Documentos Institucionais
    • Status
    Institucional
    • Sobre nós
    • Trabalhe Conosco
    • Para Empresas
    • Para Escolas
    • Política de Privacidade
    • Compromisso de Integridade
    • Termos de Uso
    • Canal de Ética
    • Código de Ética
    • Fale Conosco
    • Documentos Institucionais
    • Status

    A Alura

    • Como Funciona
    • Inteligência Artificial
    • Plataforma
    • Depoimentos
    • Instrutores(as)
    • Dev em <T>
    • Luri, a Inteligência Artificial da Alura
    • IA Conference
    • Cursos Imersivos
    • Perguntas Frequentes
    A Alura
    • Como Funciona
    • Inteligência Artificial
    • Plataforma
    • Depoimentos
    • Instrutores(as)
    • Dev em <T>
    • Luri, a Inteligência Artificial da Alura
    • IA Conference
    • Cursos Imersivos
    • Perguntas Frequentes

    Conteúdos

    • Alura Cases
    • Imersão Engenharia de Software: Dev na Era da IA
    • Artigos
    • Podcasts
    • Artigos de educação corporativa
    Conteúdos
    • Alura Cases
    • Imersão Engenharia de Software: Dev na Era da IA
    • Artigos
    • Podcasts
    • Artigos de educação corporativa
    Uma Empresa do GrupoLogo Grupo Alun

    Outras empresas do Grupo Alun

    • FIAP
    • STARTSE
    • PM3
    • LUMINA

    Ao submeter seu e-mail, você concorda com a política de privacidade da Alura.

    Redes Sociais & Apps

    instagram
    youtube
    tiktok
    x
    appStore
    googlePlay
    Uma Empresa do GrupoLogo Grupo Alun

    Outras empresas do Grupo Alun

    • FIAP
    • STARTSE
    • PM3
    • LUMINA

    Ao submeter seu e-mail, você concorda com a política de privacidade da Alura.

    Redes Sociais & Apps

    instagram
    youtube
    tiktok
    x
    appStore
    googlePlay
    Alura