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.

Você vai aprender
  • As regras: quais caracteres podem entrar num nome e por que ele não pode começar com número.
  • Que preco, Preco e PRECO são três variáveis diferentes.
  • As palavras reservadas (como for e class), 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 print ou sum como 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)

RegraValeNão vale
Só letras, algarismos e o sublinhado _preco_pao, total2preco-pao, total$, preco pao
Não pode começar com algarismopao2, _22pao
Não pode ser uma palavra reservadaturma, paraclass, for, True
Maiúsculas e minúsculas são diferentespreco, 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).
Poder não quer dizer dever

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".

As palavras reservadas "suaves"

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.

EstiloExemploNo Python
snake_casepreco_do_paoVariáveis e funções. É o padrão
MAIÚSCULAS_COM_SUBLINHADOPRECO_DO_PAOConstantes: valores que não devem mudar durante o programa
CamelCase (com a primeira maiúscula)ContaBancariaNomes de classes (aula Classes e Objetos)
camelCase (com a primeira minúscula)precoDoPaoFunciona, 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:

EvitePrefiraPor quê
x = 0.75preco_pao = 0.75x não diz nada; daqui a uma semana nem você vai lembrar
qtdpcts = 3quantidade_pacotes = 3Abreviações demais viram enigma. Nome um pouco mais comprido não custa nada
l = 5, O = 0, I = 1litros = 5A 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_padariaprecos_paesComprido 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 print a um texto. A função print continua existindo, mas o nome print agora 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

Nome que começa com algarismo
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.

Hífen no nome
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.

Espaço no nome
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.

Símbolo no nome
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.

Palavra reservada como nome
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

NomePode?Por quê
preco_paoSim, e é o costumeMinúsculas com sublinhado (snake_case)
PRECO_PAOSimCostume para constantes
pao2, _rascunhoSimAlgarismo fora do começo; sublinhado em qualquer lugar
precoPaoSim, mas eviteFunciona; não é o estilo do Python
preçoSim, mas eviteFunciona; fácil de confundir com preco
print, sum, typeSim, mas não façaEsconde a função do Python (TypeError: … is not callable)
2paoNãoSyntaxError: invalid decimal literal
preco-paoNãoSyntaxError: cannot assign to expression here
preco pao, total$NãoSyntaxError: invalid syntax
class, for, ifNãoPalavra reservada: SyntaxError: invalid syntax
True, False, NoneNãoSyntaxError: cannot assign to True
🍞NãoSyntaxError: invalid character

Exercícios

1. Conserte o nome

Reescreva o nome valor total seguindo o costume do Python:

= 42

2. Constante

Como se escreve, pelo costume, a constante "dias da semana"?

= 7

3. Quantas variáveis?

bolo = 1
Bolo = 2
BOLO = 3
bolo = 4

Quantas variáveis diferentes existem no fim deste programa?

Resposta:

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ão SyntaxError.
  • Maiúsculas contam: preco, Preco e PRECO sã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_sublinhado para variáveis, MAIUSCULAS para 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 aparece TypeError: … is not callable.