Python Nomes de Variáveis
Na aula Variáveis você criou preco, quantidade, estoque. O nome de uma variável é você quem escolhe, mas não vale qualquer coisa: o Python tem regras (quebre uma e o programa nem roda) e os programadores Python têm costumes (quebre um e o programa roda, mas fica estranho para quem lê). Nesta aula você vai conhecer os dois.
- As regras: quais caracteres podem entrar num nome e por que ele não pode começar com número.
- Que
preco,PrecoePRECOsão três variáveis diferentes. - As palavras reservadas (como
foreclass), que não podem ser nomes, e o erro real que aparece. - O costume do Python:
minusculas_com_sublinhado(o snake_case) e as constantes em maiúsculas. - Que nomes com acento funcionam, e por que, mesmo assim, não são o costume.
- A armadilha de usar
printousumcomo nome de variável.
Os programas desta aula foram rodados com o Python 3.14 na máquina fictícia da Ana (usuária ana, computador notebook), com python3 arquivo.py.
A ideia: etiquetas que o Python consegue ler
Imagine as etiquetas dos potes na cozinha da padaria. Elas podem ter qualquer palavra, mas precisam ser legíveis por quem vai procurar: "FARINHA", "açúcar_mascavo", "fermento2". Uma etiqueta com um desenho, ou que começa com um número de telefone, confunde.
Com o Python é igual, só que quem lê é um programa, e ele é muito exigente. Quando o Python lê 2pao, ele vê o algarismo 2 e acha que vem um número; quando lê preco-pao, vê uma conta de menos. As regras existem para que o nome nunca seja confundido com outra coisa.
1. As regras (obrigatórias)
| Regra | Vale | Não vale |
|---|---|---|
Só letras, algarismos e o sublinhado _ | preco_pao, total2 | preco-pao, total$, preco pao |
| Não pode começar com algarismo | pao2, _2 | 2pao |
| Não pode ser uma palavra reservada | turma, para | class, for, True |
| Maiúsculas e minúsculas são diferentes | preco, Preco e PRECO são três nomes | |
Todos estes nomes obedecem às regras:
preco = 7.5 preco_pao = 0.75 total2 = 30 _rascunho = "teste" Preco = 99 PRECO = 1000 print(preco, preco_pao, total2, _rascunho) print(preco, Preco, PRECO)
$ python3 validos.py 7.5 0.75 30 teste 7.5 99 1000
- preco_pao
- O sublinhado (
_, a "underline" ou "underscore") é o único sinal permitido. Ele faz o papel do espaço, que não pode. - total2
- Algarismos podem aparecer, desde que não seja no começo.
- _rascunho
- Pode começar com sublinhado. Para o Python, é um nome como outro qualquer. (Entre programadores, o sublinhado no começo é um recado: "isto é de uso interno". Você vai ver isso em Encapsulamento.)
- preco, Preco, PRECO
- Três variáveis diferentes, cada uma com o seu valor, como mostra a segunda linha da saída. O Python é sensível a maiúsculas (case-sensitive, em inglês).
Ter preco e Preco no mesmo programa é permitido, mas é pedir para errar: um dia você digita um no lugar do outro e o programa usa o valor errado, sem aviso. Use sempre minúsculas (seção 3) e esse problema não existe.
2. Palavras reservadas
Algumas palavras já têm um significado fixo para o Python: if ("se"), for ("para"), class ("classe"), True ("verdadeiro")… São as palavras reservadas (ou palavras-chave, keywords). Elas não podem ser nomes de variáveis. O próprio Python mostra a lista:
import keyword print(keyword.kwlist) print(len(keyword.kwlist))
$ python3 palavras.py ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] 35
São 35 no Python 3.14. O import keyword traz um módulo da biblioteca do Python (aula Módulos e import), e len() conta quantos itens a lista tem. Não precisa decorar: você vai conhecer cada palavra na aula em que ela aparece, e a lista completa fica na referência Palavras-chave. Repare que todas estão em inglês, então nomes em português, como turma ou para, nunca batem com elas.
Tentar usar uma delas dá SyntaxError, e o programa nem começa:
class = "3º ano"
$ python3 n-class.py
File "/home/ana/n-class.py", line 1
class = "3º ano"
^
SyntaxError: invalid syntax
"Sintaxe inválida". A mensagem não diz "palavra reservada", e isso confunde. O que aconteceu: quando o Python lê class, ele espera o começo de uma classe (class Turma:, aula Classes e Objetos), e o =, apontado pelo ^, não faz sentido ali. Com True a mensagem é mais clara:
True = 1
$ python3 n-true.py
File "/home/ana/n-true.py", line 1
True = 1
^^^^
SyntaxError: cannot assign to True
"Não dá para atribuir a True". Dica: se uma linha simples como nome = valor dá invalid syntax com o ^ logo depois do nome, desconfie de que o nome é uma palavra reservada. Em português, o problema some: turma = "3º ano".
Existem ainda quatro palavras reservadas suaves (soft keywords): match, case, type e _. Elas só são especiais em certos lugares (como o match da aula match e case) e, fora deles, funcionam como nomes comuns: match = "Brasil x Argentina" roda sem erro. Mesmo assim, evite: type, por exemplo, também é o nome de uma função que você vai usar muito (seção 5).
3. O costume: snake_case
As regras dizem o que o Python aceita. Os costumes dizem o que os programadores Python esperam ler. Eles estão escritos num documento chamado PEP 8, o guia de estilo oficial do Python (aula Estilo de Código). Para variáveis, a regra é:
Tudo em minúsculas, com as palavras separadas por sublinhado. Esse estilo tem o apelido de snake_case ("caixa de cobra"), porque os sublinhados deixam o nome comprido e rasteiro como uma cobra.
| Estilo | Exemplo | No Python |
|---|---|---|
| snake_case | preco_do_pao | Variáveis e funções. É o padrão |
| MAIÚSCULAS_COM_SUBLINHADO | PRECO_DO_PAO | Constantes: valores que não devem mudar durante o programa |
| CamelCase (com a primeira maiúscula) | ContaBancaria | Nomes de classes (aula Classes e Objetos) |
| camelCase (com a primeira minúscula) | precoDoPao | Funciona, mas é costume de outras linguagens (JavaScript, Java). Evite em Python |
precoDoPao = 0.75 preco_do_pao = 0.75 print(precoDoPao, preco_do_pao)
$ python3 camel.py 0.75 0.75
Os dois funcionam igual (e são duas variáveis diferentes). O Python não reclama do precoDoPao; quem estranha é a pessoa que vai ler o seu código.
Constantes
Alguns valores não mudam durante o programa: o preço fixo do pão, a taxa de entrega, o número de dias da semana. O costume é escrevê-los em maiúsculas, no começo do arquivo:
PRECO_PAO = 0.75
TAXA_ENTREGA = 5.0
paes = 12
print("Total:", paes * PRECO_PAO + TAXA_ENTREGA)
$ python3 constante.py Total: 14.0
Para o Python, PRECO_PAO é uma variável como outra qualquer: ele deixaria você trocar o valor. As maiúsculas são um recado para as pessoas: "não mude isto".
Nomes que se explicam
Um bom nome diz o que a variável guarda, sem que ninguém precise adivinhar:
| Evite | Prefira | Por quê |
|---|---|---|
x = 0.75 | preco_pao = 0.75 | x não diz nada; daqui a uma semana nem você vai lembrar |
qtdpcts = 3 | quantidade_pacotes = 3 | Abreviações demais viram enigma. Nome um pouco mais comprido não custa nada |
l = 5, O = 0, I = 1 | litros = 5 | A PEP 8 desaconselha esses três nomes: em muitas fontes, l e I se confundem com o 1, e O com o zero |
lista_de_todos_os_precos_dos_paes_da_padaria | precos_paes | Comprido demais também atrapalha |
Missão: o programa tem dois nomes que quebram as regras e não roda. Renomeie as variáveis seguindo o costume do Python: quantidade e preco_do_pao. Troque os nomes também na última linha.
1quantidade = 12
preco do pao = 0.75
print("Total:", 1quantidade * preco do pao)
quantidade = 12
preco_do_pao = 0.75
print("Total:", quantidade * preco_do_pao)
4. E os acentos?
O Python 3 aceita letras de qualquer idioma nos nomes: ç, ã, é, até letras gregas e japonesas. Isto roda:
preço = 7.5 ação = "promoção" print(preço, ação)
$ python3 acento.py 7.5 promoção
Funciona, mas não é o costume. Quase todo código Python do mundo usa nomes sem acento (em geral, em inglês). E há um motivo prático: preço e preco são nomes diferentes, e é muito fácil digitar um no lugar do outro:
preço = 7.5 print(preco)
$ python3 acento-erro.py
Traceback (most recent call last):
File "/home/ana/acento-erro.py", line 2, in <module>
print(preco)
^^^^^
NameError: name 'preco' is not defined. Did you mean: 'preço'?
O "Did you mean" ajudou, mas o erro não precisava existir. Por isso o guia usa nomes em português e sem acento: preco, acao, paes. Os textos entre aspas, esses sim, levam acento normalmente: "promoção".
Nem todo caractere, porém, é letra. Um emoji, por exemplo, não pode ser nome:
🍞 = 12
$ python3 n-emoji.py
File "/home/ana/n-emoji.py", line 1
🍞 = 12
^
SyntaxError: invalid character '🍞' (U+1F35E)
"Caractere inválido". O U+1F35E é o número desse desenho na tabela Unicode, a lista de todos os caracteres do mundo (mais sobre ela em Strings).
5. A armadilha: nomes que já são do Python
Além das palavras reservadas, o Python tem dezenas de funções embutidas (que já vêm prontas): print, input, type, sum, len, list, str… Elas não são reservadas: o Python deixa você criar uma variável com o mesmo nome. E aí a função some, escondida pela sua variável:
print = "Bom dia"
print("Olá, Ana!")
$ python3 sombra.py
Traceback (most recent call last):
File "/home/ana/sombra.py", line 2, in <module>
print("Olá, Ana!")
~~~~~^^^^^^^^^^^^^
TypeError: 'str' object is not callable
- print = "Bom dia"
- A linha 1 não deu erro: ela prendeu a etiqueta
printa um texto. A funçãoprintcontinua existindo, mas o nomeprintagora aponta para outra coisa. - print("Olá, Ana!")
- Na linha 2, o Python pega o que está preso ao nome
print, o texto"Bom dia", e tenta chamá-lo com os parênteses, como se fosse uma função. - TypeError: 'str' object is not callable
- "Erro de tipo: um objeto
str(texto) não pode ser chamado". Um texto não é uma função; não dá para "rodar" um texto com parênteses.
O mesmo acontece com qualquer função embutida. Este erro é ainda mais traiçoeiro, porque a linha que dá problema pode estar bem longe da linha que causou:
sum = 10 total = sum([1, 2, 3])
$ python3 sombra2.py
Traceback (most recent call last):
File "/home/ana/sombra2.py", line 2, in <module>
total = sum([1, 2, 3])
TypeError: 'int' object is not callable
sum ("soma") é a função que soma os itens de uma lista (aula Funções Embutidas), e a variável sum = 10 a escondeu. Como evitar: não use como nome de variável print, input, type, sum, len, list, str, int, max, min. Nomes em português, como soma e total, resolvem. (A lista completa está em Funções Embutidas.)
Quando dá errado
2pao = 5
$ python3 n-numero.py
File "/home/ana/n-numero.py", line 1
2pao = 5
^
SyntaxError: invalid decimal literal
"Literal decimal inválido". Ao ver o 2, o Python começou a ler um número, e um número não pode ter pao grudado nele. Como consertar: o algarismo vai no fim, pao2, ou por extenso, dois_paes.
preco-pao = 0.75
$ python3 n-hifen.py
File "/home/ana/n-hifen.py", line 1
preco-pao = 0.75
^^^^^^^^^
SyntaxError: cannot assign to expression here. Maybe you meant '==' instead of '='?
"Não dá para atribuir a uma expressão aqui". Para o Python, o hífen é o sinal de menos: ele leu preco - pao, uma conta (uma expressão), e não dá para guardar um valor numa conta. A sugestão do == não serve neste caso. Como consertar: sublinhado no lugar do hífen, preco_pao.
preco pao = 0.75
$ python3 n-espaco.py
File "/home/ana/n-espaco.py", line 1
preco pao = 0.75
^^^
SyntaxError: invalid syntax
O Python leu o nome preco e, logo depois, outro nome, pao, que o ^^^ aponta. Dois nomes lado a lado não formam nada. Como consertar: preco_pao.
total$ = 30
$ python3 n-cifrao.py
File "/home/ana/n-cifrao.py", line 1
total$ = 30
^
SyntaxError: invalid syntax
O $ não pode aparecer em nome nenhum (em outras linguagens, como PHP e Bash, ele aparece, e isso confunde quem vem delas). O mesmo vale para @, %, !, ? e os outros sinais. Como consertar: total_reais.
for = 3
$ python3 n-for.py
File "/home/ana/n-for.py", line 1
for = 3
^
SyntaxError: invalid syntax
Como com o class da seção 2: o Python esperava o começo de uma repetição for (aula for). Como consertar: um nome em português, vezes = 3.
Missão: a Ana usou print como nome de variável e agora o programa dá TypeError. Troque o nome da variável por aviso (nas duas linhas) para o recado aparecer.
print = "Bolo de cenoura em promoção" print(print)
aviso = "Bolo de cenoura em promoção" print(aviso)
Referência rápida
| Nome | Pode? | Por quê |
|---|---|---|
preco_pao | Sim, e é o costume | Minúsculas com sublinhado (snake_case) |
PRECO_PAO | Sim | Costume para constantes |
pao2, _rascunho | Sim | Algarismo fora do começo; sublinhado em qualquer lugar |
precoPao | Sim, mas evite | Funciona; não é o estilo do Python |
preço | Sim, mas evite | Funciona; fácil de confundir com preco |
print, sum, type | Sim, mas não faça | Esconde a função do Python (TypeError: … is not callable) |
2pao | Não | SyntaxError: invalid decimal literal |
preco-pao | Não | SyntaxError: cannot assign to expression here |
preco pao, total$ | Não | SyntaxError: invalid syntax |
class, for, if | Não | Palavra reservada: SyntaxError: invalid syntax |
True, False, None | Não | SyntaxError: cannot assign to True |
🍞 | Não | SyntaxError: invalid character |
Exercícios
1. Conserte o nome
Reescreva o nome valor total seguindo o costume do Python:
2. Constante
Como se escreve, pelo costume, a constante "dias da semana"?
3. Quantas variáveis?
bolo = 1 Bolo = 2 BOLO = 3 bolo = 4
Quantas variáveis diferentes existem no fim deste programa?
4. Qual destes nomes é válido?
5. Qual nome segue o costume do Python para uma variável?
6. Um programa começa com input = 5. O que acontece numa linha seguinte com nome = input("Nome: ")?
Missão final: a etiqueta das encomendas
Missão: o programa funciona, mas os nomes estão fora do costume. Renomeie NomeCliente para nome_cliente e bolosEncomendados para bolos_encomendados, e troque também no print.
NomeCliente = "Ana"
bolosEncomendados = 3
print("Encomenda de", NomeCliente + ":", bolosEncomendados, "bolos")
nome_cliente = "Ana"
bolos_encomendados = 3
print("Encomenda de", nome_cliente + ":", bolos_encomendados, "bolos")
Resumo
- Um nome pode ter letras, algarismos e sublinhado (
_), e não pode começar com algarismo. Espaço, hífen e símbolos dãoSyntaxError. - Maiúsculas contam:
preco,PrecoePRECOsão três variáveis. - As 35 palavras reservadas (
if,for,class,True…) não podem ser nomes; o erro costuma ser sóinvalid syntax. - O costume do Python (PEP 8):
minusculas_com_sublinhadopara variáveis,MAIUSCULASpara constantes. Nomes que dizem o que guardam. - Acentos funcionam (
preço), mas não são o costume: o guia usa nomes em português sem acento. - Não use nomes de funções do Python (
print,input,sum,type…): a função fica escondida e apareceTypeError: … is not callable.