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.
- 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,FalseeNone, que começam com maiúscula.true(minúsculo) não é nada para o Python: é um nome qualquer, eprint(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
| Palavra | O que faz | Exemplo | Resultado | Aula |
|---|---|---|---|---|
True | O valor "verdadeiro". | print(3 < 5) | True | Booleanos |
False | O valor "falso". | print(3 > 5) | False | Booleanos |
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
| Palavra | O que faz | Exemplo | Resultado | Aula |
|---|---|---|---|---|
and | "e": verdadeiro só se os dois lados forem. | print(True and False) | False | and, or e not |
or | "ou": verdadeiro se um dos lados for. Devolve o primeiro valor verdadeiro. | print(0 or "padrão") | padrão | and, or e not |
not | "não": inverte. | print(not True) | False | and, or e not |
in | "está em?". Também faz parte do for … in. | print("café" in ["pão", "café"]) | True | is e in |
not in | "não está em?" | print("chá" not in ["pão"]) | True | is 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 True | is e in |
Decisões
| Palavra | O que faz | Exemplo | Resultado | Aula |
|---|---|---|---|---|
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ção | if |
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 linha | Escolhe um de dois valores. | n = 0print(5 if n == 0 else 6) | 5 | if em uma Linha |
Repetições
| Palavra | O que faz | Exemplo | Resultado | Aula |
|---|---|---|---|---|
while | "enquanto": repete enquanto a condição for verdadeira. | n = 3while n > 0: n -= 1print(n) | 0 | while |
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") | 02(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ço | Roda quando o laço termina sem break. | veja o exemplo acima | else nos Laços | |
Funções
| Palavra | O que faz | Exemplo | Resultado | Aula |
|---|---|---|---|---|
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 | ||
lambda | Uma função pequena, de uma expressão só, sem nome. | f = lambda x: x * 2print(f(21)) | 42 | lambda |
yield | "render, entregar": faz da função um gerador, que entrega um valor por vez. | def gera(): yield 1 yield 2print(list(gera())) | [1, 2] | Geradores (yield) |
global | Dentro de uma função, diz "esta variável é a de fora, do programa todo". | total = 0def somar(valor): global total total += valorsomar(5); somar(3)print(total) | 8 | Escopo |
nonlocal | Numa 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 maism = contador(); m()print(m()) | 2 | Escopo |
pass | "passar": não faz nada. Serve para deixar um bloco vazio sem erro. | class Vazia: passprint(Vazia) | <class '__main__.Vazia'> | Sintaxe e Indentação |
Classes e módulos
| Palavra | O que faz | Exemplo | Resultado | Aula |
|---|---|---|---|---|
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 m2from math import piprint(m2.sqrt(16), pi) | 4.0 3.141592653589793 | Mó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
| Palavra | O que faz | Exemplo | Resultado | Aula |
|---|---|---|---|---|
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 negativafim | 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 10 | Testes |
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
| Palavra | O que faz | Exemplo | Resultado | Aula |
|---|---|---|---|---|
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 = 10del xprint(x) | NameError: name 'x' is not defined | Removendo Itens |
async | "assíncrono": cria uma função que pode esperar sem travar o programa. | import asyncioasync def oi(): await asyncio.sleep(0) return "oi"print(asyncio.run(oi())) | oi | asyncio |
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.
| Palavra | Especial quando… | Desde | Aula |
|---|---|---|---|
match | começa uma linha match valor: (escolher entre vários casos) | 3.10 | match e case |
case | está dentro de um match: case padrão: | 3.10 | match e case |
_ | é o padrão de um case _:, o "qualquer outra coisa" | 3.10 | match e case |
type | começa uma linha type Nome = … (dar nome a um tipo) | 3.12 | Dicas 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.
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 2e o^embaixo do=: depois declasso 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 uminvalid syntaxaparece 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ódigo | Mensagem real | Quer dizer |
|---|---|---|
class = "3A", for = 3, pass = 1, from = "Ana", import = 1 | SyntaxError: invalid syntax | palavra reservada usada como nome |
def if(): pass | SyntaxError: invalid syntax (com ^^ embaixo do if) | o mesmo, como nome de função |
True = 1 | SyntaxError: cannot assign to True | "não dá para atribuir a True" |
None = 0 | SyntaxError: cannot assign to None | o mesmo com None |
print(lambda) | SyntaxError: invalid syntax | lambda sozinha está incompleta |
break fora de um laço | SyntaxError: 'break' outside loop | "break fora de laço" |
continue fora de um laço | SyntaxError: 'continue' not properly in loop | "continue não está num laço" |
return 5 fora de função | SyntaxError: 'return' outside function | "return fora de função" |
yield 1 fora de função | SyntaxError: 'yield' outside function | o mesmo com yield |
await x fora de função | SyntaxError: 'await' outside function | só vale dentro de async def |
nonlocal x no programa principal | SyntaxError: nonlocal declaration not allowed at module level | só vale numa função dentro de outra |
nonlocal y sem um y na função de fora | SyntaxError: 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,FalseeNonecomeçam com maiúscula. print,list,input,typenã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, ehelp("for")explica cada uma.