Python Palavras-chave

As palavras-chave (keywords) são as palavras que fazem parte da própria língua do Python: if, for, def, return… São como as palavras de um formulário que você não pode apagar: elas já têm um papel fixo, e por isso não podem ser usadas como nome de variável, função ou classe. No Python 3.14 são 35, mais 4 palavras-chave "suaves" que só são especiais em certos lugares. Esta página lista todas, com o que cada uma faz e o link para a aula. A regra dos nomes está na aula Nomes de Variáveis.

Como ler as tabelas
  • Exemplo é um trecho curto de programa; Resultado é o que o Python 3.14.4 mostrou no computador da Ana ao rodá-lo.
  • As palavras-chave são escritas sempre em minúsculas, menos três: True, False e None, que começam com maiúscula. true (minúsculo) não é nada para o Python: é um nome qualquer, e print(true) dá NameError: name 'true' is not defined. Did you mean: 'True'?.

A lista oficial, perguntada ao Python

O módulo keyword ("palavra-chave") guarda a lista oficial. kwlist são as palavras reservadas; softkwlist, as suaves:

import keyword

print(keyword.kwlist)
print(len(keyword.kwlist))
print(keyword.softkwlist)
$ python3 kw.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
['_', 'case', 'match', 'type']

O mesmo módulo responde se uma palavra é reservada: keyword.iskeyword("for") deu True, keyword.iskeyword("print") deu False (print é uma função, não uma palavra-chave) e keyword.iskeyword("match") deu False, porque match é suave: quem responde True para ela é keyword.issoftkeyword("match").

A ajuda embutida também mostra a lista, em colunas:

$ python3 -c 'help("keywords")'

Here is a list of the Python keywords.  Enter any keyword to get more help.

False               class               from                or
None                continue            global              pass
True                def                 if                  raise
and                 del                 import              return
as                  elif                in                  try
assert              else                is                  while
async               except              lambda              with
await               finally             nonlocal            yield
break               for                 not

"Aqui está a lista das palavras-chave do Python. Digite qualquer uma para ter mais ajuda": no modo interativo, help("for") mostra a explicação (em inglês) de cada uma.


Valores

PalavraO que fazExemploResultadoAula
TrueO valor "verdadeiro".print(3 < 5)TrueBooleanos
FalseO valor "falso".print(3 > 5)FalseBooleanos
None"Nada", "nenhum valor". É o que uma função sem return devolve.print(type(None))<class 'NoneType'>O Valor None

Lógica e comparação

PalavraO que fazExemploResultadoAula
and"e": verdadeiro só se os dois lados forem.print(True and False)Falseand, or e not
or"ou": verdadeiro se um dos lados for. Devolve o primeiro valor verdadeiro.print(0 or "padrão")padrãoand, or e not
not"não": inverte.print(not True)Falseand, or e not
in"está em?". Também faz parte do for … in.print("café" in ["pão", "café"])Trueis e in
not in"não está em?"print("chá" not in ["pão"])Trueis e in
is"é o mesmo objeto?" (não só igual: o mesmo).a = [1]; b = a; c = [1]
print(a is b, a is c, a == c)
True False Trueis e in

Decisões

PalavraO que fazExemploResultadoAula
if"se": roda o bloco só se a condição for verdadeira.def checar(nota):
    if nota >= 7:
        return "aprovada"
    elif nota >= 5:
        return "recuperação"
    else:
        return "reprovada"
print(checar(8), checar(5))
aprovada recuperaçãoif
elif"senão, se": mais uma condição, testada só se as de cima falharam.elif
else"senão": o caso que sobrou. Também aparece em for, while e try.if e else
if … else numa linhaEscolhe um de dois valores.n = 0
print(5 if n == 0 else 6)
5if em uma Linha

Repetições

PalavraO que fazExemploResultadoAula
while"enquanto": repete enquanto a condição for verdadeira.n = 3
while n > 0:
    n -= 1
print(n)
0while
for"para cada": passa por cada item de uma sequência.for i in range(5):
    if i == 1: continue
    if i == 3: break
    print(i)
else:
    print("nunca")
0
2
(o 1 foi pulado, o laço parou no 3 e o else não rodou, por causa do break)
for
continue"continuar": pula o resto desta volta e vai para a próxima.break e continue
break"quebrar": sai do laço na hora.break e continue
else no laçoRoda quando o laço termina sem break.veja o exemplo acimaelse nos Laços

Funções

PalavraO que fazExemploResultadoAula
def"definir": cria uma função.def dobro(x):
    return x * 2
(cria a função; dobro(21) dá 42)Funções (def)
return"devolver": termina a função e entrega um valor.return
lambdaUma função pequena, de uma expressão só, sem nome.f = lambda x: x * 2
print(f(21))
42lambda
yield"render, entregar": faz da função um gerador, que entrega um valor por vez.def gera():
    yield 1
    yield 2
print(list(gera()))
[1, 2]Geradores (yield)
globalDentro de uma função, diz "esta variável é a de fora, do programa todo".total = 0
def somar(valor):
    global total
    total += valor
somar(5); somar(3)
print(total)
8Escopo
nonlocalNuma função dentro de outra, diz "esta variável é a da função de fora".def contador():
    n = 0
    def mais():
        nonlocal n
        n += 1
        return n
    return mais
m = contador(); m()
print(m())
2Escopo
pass"passar": não faz nada. Serve para deixar um bloco vazio sem erro.class Vazia:
    pass
print(Vazia)
<class '__main__.Vazia'>Sintaxe e Indentação

Classes e módulos

PalavraO que fazExemploResultadoAula
class"classe": cria um molde de objetos.class Vazia:
    pass
(veja pass acima)Classes e Objetos
import"importar": traz um módulo para o programa.import math as m2
from math import pi
print(m2.sqrt(16), pi)
4.0 3.141592653589793Módulos e import
from"de": traz só um nome de dentro do módulo.Módulos e import
as"como": dá um apelido. Também em with … as e except … as.Módulos e import

Erros

PalavraO que fazExemploResultadoAula
try"tentar": roda o bloco vigiando erros.try:
    checar(-1)
except ValueError as erro:
    print("erro:", erro)
finally:
    print("fim")

(com um checar que faz raise ValueError("nota negativa") para nota menor que zero)
erro: nota negativa
fim
try e except
except"exceto": o que fazer se aquele erro acontecer.try e except
finally"finalmente": roda sempre, com erro ou sem.else e finally
raise"levantar": lança um erro de propósito.raise
assert"afirmar": confere uma condição; se for falsa, lança AssertionError.assert 1 > 2, "a nota não pode passar de 10"AssertionError: a nota não pode passar de 10Testes
Novidade do 3.14: aviso para return dentro de finally 3.14

Um return, break ou continue dentro do finally apaga em silêncio o resultado (ou o erro) do try. O 3.14 passou a avisar (PEP 765):

def f():
    try:
        return 1
    finally:
        return 2
print(f())
$ python3 fim.py
/home/ana/fim.py:5: SyntaxWarning: 'return' in a 'finally' block
  return 2
2

O programa roda (é só um aviso), mas o return 1 foi jogado fora. Os nomes dos erros que vão no except estão na referência de exceções.


Arquivos, apagar e esperar

PalavraO que fazExemploResultadoAula
with"com": abre algo (um arquivo) e garante que será fechado no fim do bloco.with open("lista.txt", "w") as arquivo:
    arquivo.write("pão\n")
print(arquivo.closed)
True (o arquivo já está fechado)Gerenciadores de Contexto
del"apagar": apaga uma variável, um item de lista ou uma chave de dicionário.x = 10
del x
print(x)
NameError: name 'x' is not definedRemovendo Itens
async"assíncrono": cria uma função que pode esperar sem travar o programa.import asyncio
async def oi():
    await asyncio.sleep(0)
    return "oi"
print(asyncio.run(oi()))
oiasyncio
await"aguardar": dentro de uma função async, espera outra terminar.asyncio

As palavras-chave suaves: match, case, type e _

As palavras-chave suaves (soft keywords) só são especiais em certo lugar. Fora dele, são nomes comuns. Elas entraram depois que muita gente já tinha variáveis chamadas match ou type; tornar essas palavras proibidas quebraria esses programas.

PalavraEspecial quando…DesdeAula
matchcomeça uma linha match valor: (escolher entre vários casos)3.10match e case
caseestá dentro de um match: case padrão:3.10match e case
_é o padrão de um case _:, o "qualquer outra coisa"3.10match e case
typecomeça uma linha type Nome = … (dar nome a um tipo)3.12Dicas de Tipo

As três primeiras trabalhando juntas:

def ponto(p):
    match p:
        case (0, 0):
            return "origem"
        case (x, 0):
            return f"no eixo x, em {x}"
        case _:
            return "outro lugar"

print(ponto((0, 0)), ponto((3, 0)), ponto((1, 2)))
$ python3 ponto.py
origem no eixo x, em 3 outro lugar

E a prova de que, fora desses lugares, elas são nomes comuns: este trecho rodou sem erro e mostrou 5 e depois ok texto 9.

match = 5
print(match)
case = "ok"; type = "texto"; _ = 9
print(case, type, _)

Poder não quer dizer dever: type também é o nome da função type(), que descobre o tipo de um valor, e uma variável type a esconde (veja o quadro abaixo). Já a frase type Nota = float não atrapalha a função: depois dela, print(type(7.5)) continuou mostrando <class 'float'>, e print(Nota.__value__) mostrou <class 'float'>.


O que não é palavra-chave (mas parece)

print, input, len, list, str, int, type, sum, max… são funções embutidas, não palavras-chave. O Python deixa você usar esses nomes para uma variável, e é justamente esse o perigo: a variável toma o lugar da função.

Uma variável chamada print
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

A linha 1 é aceita: print não é reservada, e virou o texto "Bom dia". Na linha 2, print(…) tenta "chamar" esse texto como se fosse função, e o Python reclama: 'str' object is not callable ("um objeto str não pode ser chamado"). O mesmo acontece com uma variável list, sum ou input. Escolha nomes que descrevem o conteúdo: saudacao, compras, total.


Quando dá errado: uma palavra-chave como nome

A Ana quis guardar a turma numa variável chamada class:

class como nome de variável
aluna = "Ana"
class = "3A"
print(aluna, class)
$ python3 turma.py
  File "/home/ana/turma.py", line 2
    class = "3A"
          ^
SyntaxError: invalid syntax
  • Não há a linha Traceback: o erro foi achado na leitura do arquivo, e nenhuma linha rodou (nem a 1).
  • line 2 e o ^ embaixo do =: depois de class o Python esperava o nome de uma classe, e encontrou um sinal de igual.
  • SyntaxError: invalid syntax: "sintaxe inválida". A mensagem não diz "palavra reservada"; quando um invalid syntax aparece numa linha que parece certa, confira se algum nome dela está na lista desta página.

O conserto é trocar o nome: turma = "3A".

As mensagens reais de cada caso, colhidas com python3 -c '…' no computador da Ana:

CódigoMensagem realQuer dizer
class = "3A", for = 3, pass = 1, from = "Ana", import = 1SyntaxError: invalid syntaxpalavra reservada usada como nome
def if(): passSyntaxError: invalid syntax (com ^^ embaixo do if)o mesmo, como nome de função
True = 1SyntaxError: cannot assign to True"não dá para atribuir a True"
None = 0SyntaxError: cannot assign to Noneo mesmo com None
print(lambda)SyntaxError: invalid syntaxlambda sozinha está incompleta
break fora de um laçoSyntaxError: 'break' outside loop"break fora de laço"
continue fora de um laçoSyntaxError: 'continue' not properly in loop"continue não está num laço"
return 5 fora de funçãoSyntaxError: 'return' outside function"return fora de função"
yield 1 fora de funçãoSyntaxError: 'yield' outside functiono mesmo com yield
await x fora de funçãoSyntaxError: 'await' outside functionsó vale dentro de async def
nonlocal x no programa principalSyntaxError: nonlocal declaration not allowed at module levelsó vale numa função dentro de outra
nonlocal y sem um y na função de foraSyntaxError: no binding for nonlocal 'y' found"nenhum y encontrado lá fora"

Experimente

Livre: pergunte ao Python se uma palavra é reservada. Troque as palavras da lista (tente "else", "input", "case", "true") e rode.

import keyword

for palavra in ["for", "print", "match", "True", "lista"]:
    if keyword.iskeyword(palavra):
        tipo = "palavra-chave: não pode ser nome"
    elif keyword.issoftkeyword(palavra):
        tipo = "palavra-chave suave: especial só em certos lugares"
    else:
        tipo = "nome livre"
    print(f"{palavra:8} {tipo}")

print(len(keyword.kwlist), "palavras-chave e", len(keyword.softkwlist), "suaves")

No computador da Ana, sem mudar nada, a saída foi:

$ python3 livre.py
for      palavra-chave: não pode ser nome
print    nome livre
match    palavra-chave suave: especial só em certos lugares
True     palavra-chave: não pode ser nome
lista    nome livre
35 palavras-chave e 4 suaves

Missão: o programa da Ana não roda porque usa class como nome de variável. Rode para ver o erro, depois troque o nome (nas duas linhas!) por um que não seja palavra-chave, como turma. A saída deve ser Ana 3A.

aluna = "Ana"
class = "3A"
print(aluna, class)
aluna = "Ana"
turma = "3A"
print(aluna, turma)

Resumo

  • O Python 3.14 tem 35 palavras-chave (keyword.kwlist) e 4 suaves (keyword.softkwlist: match, case, type, _).
  • Uma palavra-chave não pode ser nome de variável, função ou classe: o resultado é SyntaxError, antes de o programa rodar.
  • As suaves só são especiais no lugar delas (match …:, case …:, type X = …); fora dali, são nomes comuns.
  • Só True, False e None começam com maiúscula.
  • print, list, input, type não são palavras-chave: o Python aceita esses nomes para variáveis, mas a variável esconde a função. Evite.
  • Dúvida? keyword.iskeyword("palavra") responde, e help("for") explica cada uma.