13 minutos de leitura

Como programar melhor em Python: 15 dicas para iniciantes

Por Adriano Soares
Conteúdos do artigo

Python é uma das principais linguagens de programação do mundo e é a linguagem dominante na área de análise de dados e machine learning (aprendizado de máquina). Portanto, se você está interessado em trabalhar nessas áreas, certamente deseja saber formas de programar melhor em Python, pois tornar-se um bom programador abrirá muitas portas para você profissionalmente.

No entanto, a competição para profissionais na área de análise de dados tem aumentado significativamente, especialmente em um momento econômico global ruim, resultando em uma série de demissões em grandes empresas de tecnologia.

Nesses momentos, o mercado espera algo a mais dos candidatos a uma vaga de emprego, desde uma eficiência maior na hora de programar até uma experiência a mais, que é tão útil na hora de depurar o código (também chamado debugar).

Este artigo vai te ensinar hacks que aumentam drasticamente a eficiência na hora de escrever código. Essas pequenas técnicas já irão te diferenciar de um programador iniciante e serão o primeiro passo essencial para ter um diferencial no mercado de trabalho. Depois de internalizados, esses truques serão a base para torná-lo um bom programador e ajudá-lo a entrar nesse mercado de trabalho tão promissor.

Agora, vamos para as dicas para programar melhor e mais rápido!

1. Convertendo lista em String

A forma mais simples e elegante de converter uma lista em uma string é através do método join. Ele serve tanto para agregar todos os valores de uma lista quanto para adicionar um separador entre cada elemento.

lista_separada = ['a', 'b', 'c', 'd']
string_agregada = "".join(lista_separada)
print(string_agregada)
string_agregada_sep_virgula = ", ".join(lista_separada)
print(string_agregada_sep_virgula)

2. Quebrando strings longas com barra invertida (\)

Por vezes, precisamos declarar strings muito longas que dificultam a legibilidade do código como um todo. No entanto, isso pode ser facilmente solucionado dividindo a string longa com o caractere de barra invertida (\). Essa prática simples não apenas melhora a estética do código, mas também facilita a manutenção e compreensão dele.

string_longa = 'esssastringehmuitolongaeacabacomalegibilidadedomeucodigo'

string_longa_sep = 'esssastringehmuitolonga'\
                   'eacabacomalegibilidade'\
                   'domeucodigo'

print(string_longa)
print(string_longa_sep)

3. Comparando duas listas não ordenadas

Comparar duas listas não ordenadas pode ser uma tarefa complicada. O modo convencional seria ordenar ambas as listas e, em seguida, comparar elemento a elemento para verificar se todos conferem. Contudo, o Python já nos oferece o método Counter, um dos hacks que facilita muito essa operação.

from collections import Counter

lista_0 = ['a', 'd', 'c', 'c', 'a', 'b']
lista_1 = ['a', 'b', 'c', 'd', 'a', 'b']

print(Counter(lista_0) == Counter(lista_1))

4. Convertendo duas listas em um dicionário

Ao lidar com dados provenientes de diversas fontes em aplicações reais, é frequente a necessidade de converter esses dados para formatos mais convenientes, que facilitem sua utilização posterior.

Uma estrutura de dados muito utilizada na manipulação de dados são os dicionários, e é comum termos que converter listas para esse formato tão utilizado. O método zip pode ser muito útil para isso.

lista_0 = ['a', 'b', 'c', 'd', 'e', 'f']
lista_1 = [1, 1, 2, 3, 5, 8]

res = dict(zip(lista_0, lista_1))

print(res)

5. Aparando strings sujas (Trimming)

Ao trabalharmos com dados provenientes de técnicas como raspagem de dados (scraping), é comum nos depararmos com strings bem sujas, ou seja, com vários elementos que não nos são úteis. Para resolver esse problema, podemos usar o método strip, que simplifica a limpeza desses dados.

dado_sujo = "\n\n\n \t  Manchete do Site de Notícias N \t \n\n\n    "
dado_limpo = dado_sujo.strip()
print(dado_limpo)

6. Criando uma lista em uma linha

Na comunidade de programação, o termo Pythonico é bastante utilizado para definir linhas de código bem características de Python. Dessa forma, algo muito Pythonico a se fazer é condensar várias linhas de código em apenas uma.

Então, o truque da vez é a criação de listas em apenas uma lista, algo extremamente Pythonico! Com isso, você não apenas economiza espaço, mas também torna seu código mais elegante e fácil de entender.

lista_completa = [i for i in range(10)]
lista_pares = [i for i in range(10) if i%2 == 0]
print(lista_completa)
print(lista_pares)

7. Iterando múltiplas listas como um profissional

A forma como você itera uma lista revela um pouco sobre sua experiência com a linguagem de programação Python. Portanto, se quiser fazer isso como um programador avançado, use novamente o método zip.

lista_frutas = ['banana', 'morango', 'kiwi', 'melancia']
lista_animais = ['zebra', 'girafa', 'macaco', 'elefante']

for fruta, animal in zip(lista_frutas, lista_animais):
	print(fruta, animal)

8. Separando uma lista em múltiplas listas de mesmo tamanho

A divisão de uma lista em partes de mesmo tamanho é uma tarefa comum no nosso cotidiano. Por isso, eu recorro sempre ao mesmo código:

n_lista_menor = 2
lista_completa = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
lista_separada = [lista_completa[i:i+n_lista_menor] for i in range(0, len(lista_completa), n_lista_menor)]
print(lista_separada)

9. Checagem de tipo

A verificação de tipos também é muito comum na rotina do programador. Para realizá-la, o método isinstance é altamente recomendado, visto que ele retorna um valor booleano para confirmar se a verificação está correta.

data_type_string = 'sou uma string'

print(isinstance(data_type_string, str))
print(isinstance(data_type_string, float))

10. Usando o método get do dicionário

Programadores experientes em Python frequentemente optam pelo método get em vez de utilizar colchetes para acessar valores de um dicionário. Esse método retorna o valor solicitado caso a key do dicionário exista; do contrário, ele retornará None.

Além disso, o método get aceita um segundo argumento, que é referente ao valor retornado caso a key não seja encontrada no dicionário (ou seja, utilizando o segundo argumento em vez de retornar None, o método retornará o segundo argumento informado).

dict_exemplo = {'a' : 0, 'b': 1, 'c': 2}

key_solicitada = 'b'
print(dict_exemplo.get(key_solicitada))

key_solicitada = 'd'
valor_retornado_caso_key_n_exita = 'key nao existe'
print(dict_exemplo.get(key_solicitada, valor_retornado_caso_key_n_exita))

11. Passando múltiplos argumentos sem declará-los

Embora os *args possam confundir bastante os programadores iniciantes, eles são extremamente úteis quando você precisa criar uma função sem saber exatamente quantos argumentos o usuário inserirá.

def somar_todos_valores(*numeros):
	total = 0
	for numero in numeros:
		total += numero
	return total

print(somar_todos_valores(1, 5, 10, 15))

12. Aplicando uma função em todos elementos de uma lista

Quando é necessário aplicar a mesma operação a diversos elementos de uma lista, seja para verificar a consistência dos dados, seja para alterá-los conforme alguma necessidade, a função map é uma escolha recomendada.

def is_value_string(value):
	return isinstance(value, str)

lista_para_map = [0, 'a', 2, 'c', 'd']
lista_map = list(map(is_value_string, lista_para_map))
print(lista_map)

13. F Strings

Existem diferentes formas de modificar uma string utilizando valores pré-definidos, sendo que anos atrás utilizava-se bastante o método format ou uma simples concatenação utilizando +. No entanto, hoje é preferível o f-string, pois ele deixará o seu código muito mais legível e elegante.

Esta é mais uma ferramenta dos profissionais!

meu_nome = 'Adriano'

string_completa =  'Meu nome é ' + meu_nome    #NÃO FAÇA ISSO
print(string_completa)

string_completa =  'Meu nome é {}'.format(meu_nome)    #TB NÃO FAÇA ISSO
print(string_completa)

string_completa =  f'Meu nome é {meu_nome}'   #FAÇA ISSO
print(string_completa)

14. Calcular tempo de execução

Um programador habilidoso em Python não se preocupa apenas com a estética e usabilidade do código, mas também com sua eficiência de processamento. Quanto menor o tempo de execução, melhor. Isto é, você poupa tempo, diminui a necessidade computacional e é capaz de produzir mais com menos.

Para isso, muitas vezes será necessário medir o tempo de execução de um trecho de código ou do código completo. Isso é bem simples de ser feito em Python com o seguinte hack:

from time import time

inicio = time()

def fatorial(numero):
	total = 1
	for i in range(1, numero+1):
		total *= i
	return total

print(fatorial(6))
final = time()
print(f'O tempo total em segundos foi {final-inicio}')

15. Cuidando das exceções

As famosas exceptions (exceções) são muito conhecidas por todos os programadores de Python. Elas ocorrem quando há algum erro de execução e podem ser utilizadas tanto para lidar com erros previstos pelo programador quanto para obter informações sobre erros sem interromper a execução do código. Para utilizá-las, é sempre uma boa prática usar o try except e também tentar tomar ações específicas, caso ocorra um erro já previsto.

def divide_valor(a, b):
	try:
		print(a / b)
	except ZeroDivisionError:
		print('Impossivel dividir por zero')
	except Exception as e:
		print(f'Erro desconhecido: {e}')

divide_valor(2, 1)
divide_valor(2, 0)
divide_valor(2, 'a')

Dica extra para programar melhor

Ao aplicar todos esses hacks corretamente, você já mostra que não é mais um programador qualquer e que está preocupado em desenvolver códigos eficientes e de fácil legibilidade, o que já é uma grande realização. Contudo, só isso não é o suficiente.

A última dica que sempre dou é: pratique com projetos! Aqui, na Asimov Academy, todo o nosso ensino é baseado em projetos que simulam problemas da vida real, pois acreditamos que nos tornamos realmente bons em algo apenas com prática contínua e de longo prazo.

Mas você, por estar aqui, já está no caminho certo! Portanto, mantenha a constância para dia após dia programar melhor.

Agora, se você já domina todos as dicas dadas aqui, confira nosso artigo com 7 hacks avançados para programar em Python. Nele, falamos sobre cache, depuração de classes, decoradores e muito mais.

Muito obrigado pela atenção e até a próxima!

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse:
Conteúdos do tutorial