Código Python limpo: comentários, docstrings e PEP 8
Este tutorial foi traduzido do original em inglês.Read in EnglishLeer en españolЧитать на русскомอ่านภาษาไทยAvisar sobre um erro de tradução
Imagine abrir um livro de receitas em que cada receita foi rabiscada com uma letra bagunçada, sem títulos, sem lista de ingredientes e sem espaço entre os passos. Você até conseguiria entender tudo uma hora, mas seria sofrido. Com código acontece a mesma coisa.
Programadores profissionais passam muito mais tempo lendo código do que escrevendo. Robert C. Martin, autor do livro Clean Code, diz que essa proporção é bem maior que 10 para 1. Ou seja, deixar o seu código fácil de ler é uma das habilidades mais valiosas que você pode aprender.
Neste tutorial, você vai aprender a escrever um Python que outras pessoas (e você mesmo, no futuro) vão gostar de ler. Vamos ver comentários, docstrings, convenções de nomes e a PEP 8, o guia de estilo oficial do Python.
Por que código limpo importa?
Pense em um quarto bagunçado. Você sabe que as suas coisas estão lá em algum lugar, mas achar qualquer coisa leva uma eternidade. Código limpo é como um quarto arrumado: cada coisa tem o seu lugar, e você encontra o que precisa rapidamente.
Se você escreve um código hoje e volta a ele daqui a duas semanas, vai ter esquecido o que metade dele faz. Um código claro e bem organizado funciona como um mapa para o seu eu do futuro.
Código limpo também faz diferença quando você trabalha com outras pessoas. Em uma equipe, todo mundo precisa entender o código de todo mundo. Código bagunçado atrasa a equipe inteira.
314.159 Area of circle: 314.159
As duas versões calculam a mesma coisa. Mas a versão B mostra o que o código faz sem precisar de nenhuma explicação extra. Os nomes das variáveis são a documentação.
Como escrever bons comentários em Python
Você já sabe que comentários começam com # e que o Python os ignora. Mas saber quando e como usar comentários é o que separa o código de iniciante do código profissional.
Um bom comentário explica por que algo é feito, e não o que o código faz. Se o seu código estiver claro o bastante, o "o quê" fica evidente só de lê-lo.
# Set x to 5
x = 5
# Add 1 to x
x = x + 1
# Print x
print(x)# Start with 5 retries (server sometimes drops first request)
retry_count = 5
# Move to next attempt
retry_count = retry_count + 1
print(retry_count)Percebeu a diferença? Os comentários ruins só repetem o que o código já diz. Os bons contam por que o código existe e dão um contexto que você não teria lendo apenas o código.
Quando você deve comentar o seu código Python?
Comente quando o código faz algo surpreendente ou pouco óbvio. Se alguém lendo o seu código diria "espera, por quê?", é aí que cabe um comentário.
(sem saída)
Use comentários também para notas TODO: lembretes de coisas que você pretende corrigir ou melhorar depois. A maioria dos editores de código destaca os comentários TODO para que sejam fáceis de encontrar.
Quando você deve evitar comentários?
Se você sente necessidade de escrever um comentário explicando o que o código faz, isso geralmente é sinal de que o próprio código deveria ser mais claro. Nomes de variáveis melhores muitas vezes eliminam de vez a necessidade de comentários.
# Calculate the final price with 20% discount
p = x - (x * 0.2)discount_rate = 0.20
final_price = original_price - (original_price * discount_rate)O que são docstrings em Python?
Uma docstring é uma string especial que descreve o que uma função, classe ou módulo faz. Ela fica logo no início do corpo da função, entre aspas triplas (""").
Pense na docstring como o manual de instruções que vem com um produto. Você não precisa abrir o produto para saber o que ele faz: é só ler o manual.
Tip: $10.00
Help on function calculate_tip in module __main__:
calculate_tip(bill_amount, tip_percent)
Calculate the tip amount for a restaurant bill.
Args:
bill_amount: The total bill in dollars.
tip_percent: The tip percentage (e.g., 20 for 20%).
Returns:
The tip amount in dollars.Quando você chama help() em uma função, o Python exibe a docstring dela. É assim também que funções embutidas como print() e len() mostram a própria documentação.
Para funções curtas e simples, uma docstring de uma linha é suficiente. Para funções mais complexas, descreva os argumentos e o que a função retorna.
49 144
Convenções de nomes em Python: como nomear variáveis
Escolher bons nomes é uma das partes mais difíceis da programação. Um ótimo nome de variável é como uma boa etiqueta em uma caixa: você sabe exatamente o que tem dentro sem precisar abri-la.
O Python usa um estilo chamado snake_case para nomes de variáveis e funções. As palavras ficam em minúsculas e são separadas por sublinhados.
User: Alice Total: $29.99 Logged in: True Max retries: 3
Estas são as principais convenções de nomes que os programadores Python seguem:
Player score: 100 Max speed: 120 Pi: 3.14159
Como escolher nomes de variáveis significativos
O nome de uma variável deve descrever o que o valor representa, e não de que tipo ele é. O objetivo é que o seu código se leia como uma frase.
x = "Alice"
n = 25
f = True
temp = 3
data = 98.6
my_list = ["math", "science"]student_name = "Alice"
student_age = 25
is_enrolled = True
max_attempts = 3
body_temperature = 98.6
course_list = ["math", "science"]Nomes de uma letra só, como x, n e i, funcionam bem em fórmulas matemáticas curtas ou em laços bem pequenos. Para todo o resto, use um nome de verdade, que explique para que a variável serve.
O que é a PEP 8? O básico do guia de estilo do Python
A PEP 8 é o guia de estilo oficial do Python. PEP quer dizer "Python Enhancement Proposal" (proposta de melhoria do Python), e a de número 8 é a que trata do estilo de código. É como um uniforme para o código Python: todo mundo segue as mesmas regras, e assim qualquer código Python parece familiar.
Você não precisa decorar todas as regras. Estas são as que mais importam quando você está começando.
Como usar a indentação em Python (4 espaços)
O Python usa a indentação para agrupar o código. O padrão é 4 espaços por nível. Nunca misture tabulações e espaços: escolha um deles (espaços) e mantenha sempre o mesmo.
Hello, Alice! Hello, stranger!
Como usar linhas em branco no código Python
Linhas em branco são como as quebras de parágrafo em uma redação. Elas separam ideias diferentes e deixam o código mais fácil de percorrer com os olhos.
Area: 15 Perimeter: 16
Use duas linhas em branco antes e depois das definições de função no nível principal do arquivo. Use uma linha em branco para separar os trechos lógicos dentro de uma função.
Como usar espaços em volta dos operadores em Python
Coloque um espaço de cada lado de operadores como =, +, -, == e !=. Isso deixa o código muito mais fácil de ler à primeira vista.
total=price*quantity+tax
is_valid=age>=18 and name!=""
result=x**2+y**2total = price * quantity + tax
is_valid = age >= 18 and name != ""
result = x**2 + y**2Erros comuns de estilo em Python e como corrigi-los
Vamos ver os erros de estilo mais comuns entre iniciantes e como corrigi-los. São mudanças pequenas que fazem uma grande diferença na legibilidade.
if is_active == True:
print("Active")
if result == None:
print("No result")if is_active:
print("Active")
if result is None:
print("No result")Não compare com True ou False usando ==. Use a variável diretamente. Para None, use sempre is None em vez de == None.
userName = "Alice" # camelCase
total_Price = 29.99 # mixed style
def CalculateTotal(): # PascalCase for function
passuser_name = "Alice" # snake_case
total_price = 29.99 # snake_case
def calculate_total(): # snake_case
passEscolha um estilo e seja consistente. Em Python, esse estilo é snake_case para variáveis e funções. Misturar estilos deixa o código com cara de bagunça.
def add(a, b):
return a + b
def subtract(a, b):
return a - b
def multiply(a, b):
return a * bdef add(a, b):
return a + b
def subtract(a, b):
return a - b
def multiply(a, b):
return a * bLinters de Python: ferramentas que verificam o seu estilo automaticamente
Você não precisa decorar todas as regras da PEP 8. Ferramentas chamadas linters verificam automaticamente se o seu código tem problemas de estilo. Pense no linter como um corretor ortográfico, só que para o estilo do código.
Estes são os linters de Python mais populares, e mais um formatador:
flake8: verifica violações da PEP 8 e erros comuns. Ótimo para iniciantes.pylint: mais minucioso. Também dá sugestões sobre a qualidade do código.ruff: o novato da turma. Muito rápido, reúne várias ferramentas em uma.black: não é um linter, e sim um formatador automático. Em vez de avisar você, ele corrige o seu estilo automaticamente.A maioria dos editores de código (como o VS Code) consegue rodar linters em segundo plano e sublinhar os problemas de estilo enquanto você digita. É como ter um treinador de estilo sentado ao seu lado.
Exercícios práticos
Hora de praticar! Estes exercícios vão ajudar você a criar o hábito de escrever código Python limpo e legível.
Escreva uma função chamada celsius_to_fahrenheit que recebe uma temperatura em Celsius e retorna o valor em Fahrenheit.
A fórmula é: fahrenheit = celsius * 9/5 + 32
A sua função precisa ter:
Retorne o valor sem exibi-lo: as verificações chamam a sua função e exibem o que ela retorna. Para 100 graus Celsius, o resultado é:
212.0Este código funciona, mas os nomes das variáveis são péssimos! Ninguém consegue saber o que x, y, z, a e b significam.
Dê às variáveis nomes significativos e use snake_case. O código calcula o pagamento semanal de um trabalhador. A saída precisa continuar exatamente igual:
Weekly pay: $450.0
With overtime: $562.5O código abaixo está bagunçado. Reescreva-o seguindo as regras da PEP 8:
def calcArea(W,H):
result=W*H
return result
def calcPerimeter(W,H):
result=2*(W+H)
return result
w=8
h=5
print(f"Area: {calcArea(w,h)}")
print(f"Perimeter: {calcPerimeter(w,h)}")Corrija estes problemas:
A saída deve ser:
Area: 40
Perimeter: 26Esta função funciona, mas está bagunçada. Refatore-a para que fique limpa e profissional:
def d(p,r):
a=p*r/100
t=p-a
return t
print(d(200,15))A sua versão refatorada precisa:
A saída deve ser:
170.0Resumo: o que você aprendeu sobre código Python limpo
Agora você conhece os hábitos que separam o código de iniciante do código profissional. Aqui vai uma referência rápida:
| Conceito | Regra principal | Exemplo |
|---|---|---|
Comentários (#) | Explique o porquê, não o quê | # Texas tax rate (8.25%) |
Docstrings (""") | Descreva o que a função faz | """Convert Celsius to Fahrenheit.""" |
| Nomes de variáveis | Descritivos, em snake_case | total_price, is_valid |
| Constantes | UPPER_SNAKE_CASE | MAX_SPEED = 120 |
| Indentação | Sempre 4 espaços | def greet(): e depois 4 espaços |
| Linhas em branco | 2 entre funções | Separam trechos lógicos |
| Operadores | Espaços em volta de =, + etc. | x = a + b |
| PEP 8 | O guia de estilo oficial do Python | Consistência acima de tudo |
Código limpo não tem a ver com ser sofisticado. Tem a ver com ser gentil: com os seus colegas de equipe, com você mesmo no futuro e com qualquer pessoa que leia o seu código. Comece a criar esses hábitos agora, e eles vão acompanhar você durante toda a sua carreira em programação.
O que vem a seguir?
Você terminou a seção de fundamentos do Python! Agora você tem uma base sólida no básico da linguagem. A seguir, você vai entrar em Controle de fluxo, onde vai aprender a fazer os seus programas tomarem decisões com instruções if e repetirem ações com laços.