Palavras-Chave e Identificadores Integrados em Python

PythonBeginner
Pratique Agora

Introdução

Neste laboratório, você explorará os conceitos fundamentais das palavras reservadas e nomes pré-definidos do Python. Primeiro, você aprenderá a identificar as keywords (palavras-chave) do Python, que são palavras especiais com significados específicos que não podem ser usadas como nomes de variáveis ou funções. Usaremos o módulo built-in keyword para listá-las.

Em seguida, você descobrirá os identificadores built-in (integrados) do Python, como funções e constantes, que estão sempre disponíveis em seu código. Por fim, você verá por que é crucial evitar o uso de keywords e identificadores built-in para seus próprios nomes, a fim de prevenir erros e manter seu código limpo e funcional.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 99%. Recebeu uma taxa de avaliações positivas de 100% dos estudantes.

Identificar Palavras-Chave do Python

Nesta etapa, você aprenderá sobre as keywords (palavras-chave) do Python. As keywords, também conhecidas como palavras reservadas, são os blocos de construção fundamentais da sintaxe da linguagem. Elas têm significados especiais e não podem ser usadas como nomes para suas variáveis, funções ou quaisquer outros identificadores.

O Python fornece um módulo built-in chamado keyword que facilita a visualização de todas as keywords atuais. Vamos escrever um script para exibi-las.

O arquivo necessário, list_keywords.py, já foi criado para você. Localize-o no explorador de arquivos no lado esquerdo do WebIDE e clique para abri-lo.

Agora, adicione o seguinte código ao arquivo list_keywords.py:

import keyword

## O atributo kwlist contém uma lista de todas as palavras-chave.
print(keyword.kwlist)

Após salvar o arquivo, abra o terminal integrado no seu WebIDE. Você pode fazer isso clicando em Terminal -> New Terminal no menu superior.

Execute seu script executando o seguinte comando no terminal:

python ~/project/list_keywords.py

A saída será uma lista de todas as palavras-chave do Python.

['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']

É importante lembrar que essas palavras são reservadas. O Python diferencia maiúsculas de minúsculas (case-sensitive), então, embora if seja uma keyword, IF não é. No entanto, a melhor prática é evitar o uso de quaisquer variações de keywords como nomes para manter a clareza do código.

Explorar Identificadores Integrados do Python

Agora, vamos explorar os identificadores built-in (integrados) do Python. Estes são nomes que o Python pré-define para você, incluindo funções comuns como print(), tipos de dados como int e str, e exceções. Eles estão sempre disponíveis em qualquer script Python sem a necessidade de uma instrução import.

Você pode visualizar uma lista de todos os identificadores built-in usando a função dir() em um objeto especial chamado __builtins__.

Abra o arquivo list_builtins.py no explorador de arquivos. Adicione o seguinte código a ele:

## dir() retorna uma lista dos nomes no escopo __builtins__.
print(dir(__builtins__))

Salve o arquivo e execute o script a partir do terminal:

python ~/project/list_builtins.py

Você verá uma longa lista de nomes impressa no console. Abaixo está uma versão truncada da saída:

['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'aiter', 'all', 'anext', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']

Você reconhecerá muitos nomes úteis nesta lista, como len, input, list e dict. Nas próximas etapas, veremos por que você deve evitar usar esses nomes para suas próprias variáveis.

Evitar Usar Palavras-Chave como Identificadores

Nesta etapa, você verá o que acontece quando tenta usar uma keyword do Python como nome de variável. Como as keywords são reservadas para a estrutura da linguagem, tentar atribuir um valor a elas fará com que o programa falhe antes mesmo de ser executado.

Vamos demonstrar isso tentando usar a keyword with como nome de variável.

Abra o arquivo keyword_error.py no editor do WebIDE. Adicione o seguinte código, que está intencionalmente incorreto:

## Isso causará um erro porque 'with' é uma palavra-chave.
with = 5
print(with)

Salve o arquivo e tente executá-lo a partir do terminal:

python ~/project/keyword_error.py

O Python irá parar imediatamente e relatar um SyntaxError.

  File "/home/labex/project/keyword_error.py", line 2
    with = 5
    ^^^^
SyntaxError: invalid syntax

A mensagem de erro SyntaxError: invalid syntax indica claramente que o código está estruturado incorretamente. Isso ocorre porque o interpretador Python reconhece with como uma keyword que deveria iniciar uma instrução with, e não como um nome que pode armazenar um valor. Esta regra se aplica a todas as keywords que você listou na primeira etapa.

Evitar Sobrescrever Identificadores Integrados

Diferentemente das keywords, o Python não impede que você reatribua identificadores built-in. No entanto, fazer isso é uma fonte comum de bugs e deve ser evitado. Quando você atribui um novo valor a um nome built-in, você "esconde" sua funcionalidade original, o que pode levar a erros inesperados.

Vamos ver o que acontece quando sobrescrevemos a função built-in print.

Abra o arquivo builtin_override.py no editor do WebIDE. Adicione o seguinte código:

## Sobrescreve a função built-in print com um inteiro.
print = 5

## Agora, tenta usar print() como uma função.
print("hello")

Salve o arquivo e execute-o a partir do terminal:

python ~/project/builtin_override.py

Desta vez, o script começa a ser executado, mas falha com um TypeError.

Traceback (most recent call last):
  File "/home/labex/project/builtin_override.py", line 5, in <module>
    print("hello")
TypeError: 'int' object is not callable

O erro TypeError: 'int' object is not callable ocorre porque o nome print não se refere mais à função de impressão built-in. Em vez disso, ele se refere ao inteiro 5. Como você não pode "chamar" um inteiro como uma função (usando parênteses), o programa falha.

Isso demonstra o perigo de sobrescrever built-ins. Pode quebrar seu código de maneiras não óbvias e dificultar a depuração (debugging). Sempre escolha nomes únicos e descritivos para suas variáveis e funções para evitar esses conflitos.

Resumo

Neste laboratório, você aprendeu sobre duas categorias importantes de nomes em Python: keywords (palavras-chave) e identificadores built-in (integrados). Você usou o módulo keyword para listar todas as keywords reservadas do Python e viu como tentar usá-las como nomes de variáveis resulta em um SyntaxError.

Você também explorou a lista de identificadores built-in e demonstrou os problemas que surgem ao sobrescrevê-los, o que pode levar a TypeError e outros problemas de tempo de execução (runtime). A principal conclusão é sempre escolher nomes únicos para suas variáveis e funções, evitando tanto keywords quanto nomes built-in para garantir que seu código seja robusto, legível e livre de conflitos.