Python Sidekick: Finalizando seu treinamento de herói!
Tuplas, Conjuntos, Funções e dicas!
A essa altura você já deve ter alguma familiaridade com Python, saber variáveis, estruturas de controle, estruturas de repetição e trabalhar com listas.
Agora vamos dar uma olhada em outros conceitos importantes, que com certeza podem te ajudar a trabalhar melhor com a linguagem. Nesse post vamos falar sobre tuplas, conjuntos, funções e no final algumas sugestões e fontes de estudo. Lets code!
Coleções em Python
Além das já comentadas listas, existem as tuplas e os conjuntos, que são outros tipos de coleções em python. Assim como as listas o index das tuplas e conjuntos também começa em zero e a forma de usar loop para verificar item a item é a mesma. Vamos dar uma olhada nesses dois outros tipos de coleção e suas particularidades!
Tuplas
Trabalhando com listas podemos adicionar elementos, remover ou substituir, entretanto isso não é possível com tuplas. Tuplas são imutáveis e não podem ter seus valores alterados ao longo de um programa.
Para declarar uma lista utilizamos []
, no caso das tuplas utilizamos ()
, mas esse uso é apenas uma boa prática para melhor visualização ao ler o código o que define de fato uma tupla não é o uso dos parênteses e sim da vírgula ,
:
Estrutura básica de uma tupla:
Mesmo para criar uma tupla com apenas um elemento devemos utilizar a vírgula:
Por serem imutáveis tentar mudar valores de uma tupla da forma abaixo irá gerar um erro:
Como mencionado, podemos ver seus itens um a um usando for
assim como faríamos com uma lista:
Podemos acessar apenas parte dos seus itens usando [:]
:
E para apagar uma tupla inteira usamos del
:
Conjuntos
Conjuntos (sets) são coleções cujos itens são únicos, ou seja, eu tenho apenas um item de cada.
Para declarar um set usamos {}
:
Observe que mesmo tendo colocado o 50
nesse set duas vezes, ao chamá-lo ele é exibido somente uma vez.
Manipulando Conjuntos
Assim como nas listas podemos manipular os elementos de um conjunto. O modo de fazer isso muda um pouco mas a ideia é a mesma.
Removendo e Adicionando Itens
Para remover um elemento usamos remove()
e para adicionar add()
:
Se eu tentar remover um item que não existe com remove()
, teremos um erro. Por isso usamos discard()
, que verifica o conjunto e remove caso o item exista:
Como estamos falando de conjuntos, todas as operações possíveis em matemática também podem ser feitas com python.
Intersecção e Diferença
Para encontrar os elementos diferentes entre entre dois conjuntos devo usar difference()
.
Vamos criar um conjunto data_science
e um desenvolvimento_web
para ver a diferença entre eles:
Eu também posso fazer isso usando o operador de subtração (-
) :
Para saber a intersecção entre eles (o que ambos têm em comum) usamos intersection()
:
Também é possível obter a intersecção entre três ou mais conjuntos, para isso basta passar seus respectivos nomes dentro do parênteses (conjunto1, conjunto2)
. Dessa forma:
A intersecção também pode ser encontrada através do operador &
, assim:
Itens em comum
Assim como eu posso encontrar os elementos em comum entre dois conjuntos, posso verificar quando não tem nenhum em comum usando isdisjoint()
. Esse método retorna um valor de verdadeiro ou falso:
Eu posso verificar se um conjunto é subconjunto de outro usando issubset()
. Para ser um subconjunto todos os elementos de um devem estar dentro do outro. Vejamos exemplo:
Para unir dois ou mais grupos utilizamos union()
:
Movendo e Duplicando Itens
Para remover o último item e reutilizá-lo usamos pop()
, assim como fazemos com listas:
Para copiar um conjunto usamos copy()
:
E para limpar um dicionário todo usamos clear()
:
Ao copiar um conjunto usando copy()
, mesmo que o conjunto original seja modificado a cópia permanece a mesma.
Funções
Funções são partes de código criadas para realizar determinado tipo de tarefa. Elas servem para otimizar a codificaçãoe permitir reusabilidade de código em casos onde eu precise fazer a mesma coisa de novo, de novo e de novo.
Ao criar uma função, sempre que eu precisar dela basta chamá-la. A estrutura básica de uma função é a seguinte:
A função é declarada com def
de define. Dessa forma eu digo ao Python que estou criando uma função. Após o nome escolhido colocamos ():
e logo abaixo indentamos o código da ação que deve ser executada.
Feito isso eu chamo essa função fora da indentação. Vejamos o seguinte exemplo:
Return
O return value é o valor que a função retorna para a linha que a chamou. Para obter esse valor utilizamosreturn
que diz ao código qual valor da função ele deve passar quando ela for chamada.
Tomemos como exemplo o código abaixo, uma função que receba uma base e um expoente e faça um cálculo retornando o resultado:
Nesse caso resultado é o valor que eu quero que seja retornado. Eu passo os argumentos à função, ela realiza o cálculo e retorna o resultado.
Ao executar esse programa não será exibido 8 pois o return
retorna o valor para a linha que chama a função sem necessariamente exibir o resultado.
Argumentos e Parâmetros
Em alguns casos pode ser que haja necessidade de passar informações para uma função executar sua tarefa. Por exemplo uma função que mostre o livro favorito de um usuário:
Nesse exemplonome_livro
é o parâmetro dessa função e ‘Fahrenheit 451’
é o seu argumento.
Parâmetros são as informações que a função precisa para executar sua tarefa e argumentos são as informações passadas para que essa tarefa seja executada.
Veja:
Argumentos Posicionais e Argumentos Nominais
Quando mais de um argumento precisa ser passado à função, podemos utilizar argumentos posicionais ou nominais.
Como o próprio nome indica argumentos posicionais são recebidos na ordem em que são passados e argumentos nominais são um par chave-valor associados que a função recebe.
Vamos utilizar novamente a função livro_favorito
, dessa vez recebendo o nome do livro e de seu autor como argumentos.
Primeiro usando argumentos posicionais:
Nesse caso eu sabia a ordem livro-autor e passei os valores na ordem que faz sentido dentro da frase, entretanto caso eu inverta esses valores o resultado não será o esperado:
Para contornar essa possível inconsistência dizemos explicitamente quais valores pertencem a quais chaves, usando argumentos nominais:
Valores Padrão
Os valores padrão são usados para obter uma resposta caso um dos argumentos fique faltando ou não seja passado. Por exemplo:
Nessa função, caso eu não passe nenhum valor para nome_usuario
o argumento assume o valor padrão. Ao passar um argumento ele sobrescreve o valor padrão.
Argumentos opcionais
Algumas vezes pode ser que numa função haja a opção de passar um argumento, entretanto esse argumento não é obrigatório.
Por exemplo a seguinte função que recebe o nome de uma banda, um álbum e o ano do álbum:
Se houver um terceiro argumento o output será diferente. Ao criar o terceiro argumento com um valor padrão vazio temos a possibilidade de modificar ou não esse valor.
Caso não fosse atribuído um valor padrão, mesmo utilizando if-else
teríamos um erro ao rodar o código.
Argumentos arbitrários
Também há a possibilidade de receber um número indefinido de argumentos, ou seja, armazenar sejam quantos argumentos eu receber para determinados parâmetros.
Para isso usamos *
antes do nome do parâmetro. Vamos criar uma função que receba uma lista de compras:
Nesse exemplo, independente de quantos itens houver na lista a função irá receber como argumento.
Eu sei Python, e agora?
No post Python: From Zero to…Sidekick falei que antes de desenvolver a skynet ou criar o próximo Overwatch você precisaria dominar o básico. Bom, chegou o seu momento! Vejamos algumas recomendações para aprendizado posterior:
Exercícios e Desafios
- O já mencionado Guanabara tem uma playlist com vários exercícios resolvidos passo a passo.
- A wiki do Python Brasil tem algumas listas de exercícios divididor por “tema”, listas, loops, operadores e vários outros. Quando comecei aprender Python esses exercícios foram ótimos para meu desenvolvimento.
- Se você tem pretensões de trabalhar como desenvolvedor Python e quer se preparar com desafios baseados nas entrevistas white board das empresas do vale do silício indico os sites HackerRank, Coderbyte e Codewars. São centenas de desafios com diversos níveis de dificuldade que vão dar um boost nas suas habilidades.
Django
- Pra quem manda bem no inglês e quer aprender Python para Web no canal do freeCodeCamp há o tutorial do Coding for Entrepreneurs sobre Django.
- O Corey Schaefer tem uma playlist completa criando um blog com Django e outra usando Flask
Data Analisys e Machine Learning
- O Computerphile publicou recentemente um ótima playlist sobre análise de dados
- O Sentdex, que na minha humilde opinião tem os melhores tutoriais sobre ambos os temas, tem uma playlist muito boa sobre Análise de Dados com Python e Pandas e uma extensa playlist sobre Machine Learning. Além disso ele cobre diversos outros temas, vale a pena dar uma olhada.
- Mais uma referência do freeCodeCamp, o tutorial sobre TensorFlow 2.0
- O 3Blue1Brown, além dos ótimos vídeos sobre Cálculo e Álgebra Linear, tem uma playlist sobre Redes Neurais