Referência da Linguagem Python 3.13
Referência da Linguagem Python 3.13
Release 3.13.0
1 Introdução 3
1.1 Implementaçõ es Alternativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Notaçã o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Análise léxica 5
2.1 Estrutura das linhas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1 Linhas ló gicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.2 Linhas físicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.3 Comentá rios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.4 Declaraçõ es de codificaçã o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.5 Junçã o de linha explícita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.6 Junçã o de linha implícita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.7 Linhas em branco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.8 Indentaçã o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.9 Espaços em branco entre tokens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Outros tokens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Identificadores e palavras-chave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.1 Palavras reservadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.2 Palavras reservadas contextuais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.3 Classes reservadas de identificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4 Literais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.1 Literais de string e bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.2 Concatenaçã o de literal de string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4.3 Literais de strings formatadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4.4 Literais numé ricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4.5 Inteiros literais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4.6 Literais de ponto flutuante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4.7 Literais imaginá rios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.5 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.6 Delimitadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3 Modelo de dados 17
3.1 Objetos, valores e tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2 A hierarquia de tipos padrã o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.1 None . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.2 NotImplemented . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.3 Ellipsis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.4 [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.5 Sequê ncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.6 Tipos de conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.7 Mapeamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
i
3.2.8 Tipos chamá veis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.9 Mó dulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2.10 Classes personalizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2.11 Instâ ncias de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.12 Objetos de E/S (també m conhecidos como objetos arquivo) . . . . . . . . . . . . . . . . 30
3.2.13 Tipos internos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3 Nomes de mé todos especiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.3.1 Personalizaçã o bá sica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3.2 Personalizando o acesso aos atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.3.3 Personalizando a criaçã o de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.3.4 Personalizando verificaçõ es de instâ ncia e subclasse . . . . . . . . . . . . . . . . . . . . 48
3.3.5 Emulando tipos gené ricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.3.6 Emulando objetos chamá veis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.3.7 Emulando de tipos contê ineres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.3.8 Emulando tipos numé ricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.3.9 Gerenciadores de contexto da instruçã o with . . . . . . . . . . . . . . . . . . . . . . . . 55
3.3.10 Customizando argumentos posicionais na classe correspondê ncia de padrã o . . . . . . . . 55
3.3.11 Emulating buffer types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.3.12 Pesquisa de mé todo especial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.4 Corrotinas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.4.1 Objetos aguardá veis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.4.2 Objetos corrotina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.4.3 Iteradores assíncronos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.4.4 Gerenciadores de contexto assíncronos . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4 Modelo de execução 61
4.1 Estrutura de um programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.2 Nomeaçã o e ligaçã o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.2.1 Ligaçã o de nomes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.2.2 Resoluçã o de nomes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.2.3 Escopos de anotaçã o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.2.4 Avaliaçã o preguiçosa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.2.5 Builtins e execuçã o restrita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.2.6 Interaçã o com recursos dinâ micos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.3 Exceçõ es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5 O sistema de importação 67
5.1 importlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.2 Pacotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.2.1 Pacotes regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.2.2 Pacotes de espaço de nomes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.3 Caminho de busca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.3.1 O cache de mó dulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.3.2 Localizadores e carregadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.3.3 Ganchos de importaçã o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.3.4 O metacaminho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.4 Carregando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.4.1 Carregadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.4.2 Submó dulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.4.3 Module specs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.4.4 __path__ attributes on modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.4.5 Representaçõ es do mó dulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.4.6 Invalidaçã o de bytecode em cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.5 O localizador baseado no caminho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.5.1 Localizadores de entrada de caminho . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.5.2 Protocolo do localizador de entrada de caminho . . . . . . . . . . . . . . . . . . . . . . 76
5.6 Substituindo o sistema de importaçã o padrã o . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.7 Importaçõ es relativas ao pacote . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
ii
5.8 Consideraçõ es especiais para __main__ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.8.1 __main__.__spec__ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.9 Referê ncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6 Expressões 79
6.1 Conversõ es aritmé ticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.2 Átomos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.2.1 Identificadores (Nomes) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.2.2 Literais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.2.3 Formas de parê nteses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.2.4 Sintaxe de criaçã o de listas, conjuntos e dicioná rios . . . . . . . . . . . . . . . . . . . . . 81
6.2.5 Sintaxes de criaçã o de lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.2.6 Sintaxes de criaçã o de conjunto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.2.7 Sintaxes de criaçã o de dicioná rio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.2.8 Expressõ es geradoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.2.9 Expressõ es yield . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.3 Primá rias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.3.1 Referê ncias de atributo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
6.3.2 Subscriçõ es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
6.3.3 Fatiamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.3.4 Chamadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.4 Expressã o await . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.5 O operador de potê ncia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.6 Operaçõ es aritmé ticas uná rias e bit a bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.7 Operaçõ es biná rias aritmé ticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.8 Operaçõ es de deslocamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6.9 Operaçõ es biná rias bit a bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6.10 Comparaçõ es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.10.1 Comparaçõ es de valor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.10.2 Operaçõ es de teste de pertinê ncia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
6.10.3 Comparaçõ es de identidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.11 Operaçõ es booleanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.12 Expressõ es de atribuiçã o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.13 Expressõ es condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.14 Lambdas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.15 Listas de expressõ es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.16 Ordem de avaliaçã o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.17 Precedê ncia de operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
iii
8 Instruções compostas 115
8.1 A instruçã o if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
8.2 A instruçã o while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
8.3 A instruçã o for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
8.4 A instruçã o try . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
8.4.1 Clá usula except . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
8.4.2 Clá usula except* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
8.4.3 Clá usula else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
8.4.4 Clá usula finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
8.5 A instruçã o with . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
8.6 A instruçã o match . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
8.6.1 Visã o Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
8.6.2 Guards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
8.6.3 Blocos irrefutá veis de case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
8.6.4 Padrõ es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
8.7 Definiçõ es de funçã o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
8.8 Definiçõ es de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
8.9 Corrotinas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
8.9.1 Definiçã o de funçã o de corrotina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
8.9.2 The async for statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
8.9.3 The async with statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
8.10 Type parameter lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
8.10.1 Generic functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
8.10.2 Generic classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
8.10.3 Generic type aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
A Glossário 159
iv
C.3.11 strtod e dtoa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
C.3.12 OpenSSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
C.3.13 expat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
C.3.14 libffi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
C.3.15 zlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
C.3.16 cfuhash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
C.3.17 libmpdec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
C.3.18 Conjunto de testes C14N do W3C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
C.3.19 mimalloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
C.3.20 asyncio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
C.3.21 Global Unbounded Sequences (GUS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Índice 201
v
vi
The Python Language Reference, Release 3.13.0
Este manual de referê ncia descreve a sintaxe e a “semâ ntica central” da linguagem. É conciso, mas tenta ser exato e
completo. A semâ ntica dos tipos de objetos embutidos nã o essenciais e das funçõ es e mó dulos embutidos é descrita
em library-index. Para uma introduçã o informal à linguagem, consulte tutorial-index. Para programadores em C ou
C++, existem dois manuais adicionais: extending-index descreve a imagem de alto nível de como escrever um mó dulo
de extensã o Python, e o c-api-index descreve as interfaces disponíveis para programadores C/C++ em detalhes.
Sumário 1
The Python Language Reference, Release 3.13.0
2 Sumário
CAPÍTULO 1
Introdução
Este manual de referê ncia descreve a linguagem de programaçã o Python. O mesmo nã o tem como objetivo de ser
um tutorial.
Enquanto estou tentando ser o mais preciso possível, optei por usar especificaçõ es em inglê s e nã o formal para
tudo, exceto para a sintaxe e aná lise lé xica. Isso deve tornar o documento mais compreensível para o leitor inter-
mediá rio, mas deixará margem para ambiguidades. Consequentemente, caso estivesses vindo de Marte e tentasse
reimplementar o Python a partir deste documento, sozinho, talvez precisarias adivinhar algumas coisas e, na verdade,
provavelmente acabaria por implementar um linguagem bem diferente. Por outro lado, se estiveres usando o Python
e se perguntando quais sã o as regras precisas sobre uma determinada á rea da linguagem, você definitivamente en-
contrá neste documento o que está s procurando. Caso queiras ver uma definiçã o mais formal do linguagem, talvez
possas oferecer seu tempo – ou inventar uma má quina de clonagem :-).
É perigoso adicionar muitos detalhes de implementaçã o num documento de referê ncia de uma linguagem – a im-
plementaçã o pode mudar e outras implementaçõ es da mesma linguagem podem funcionar de forma diferente. Por
outro lado, o CPython é a ú nica implementaçã o de Python em uso de forma generalizada (embora as implementa-
çõ es alternativas continuem a ganhar suporte), e suas peculiaridades e particulares sã o por vezes dignas de serem
mencionadas, especialmente quando a implementaçã o impõ e limitaçõ es adicionais. Portanto, encontrará s poucas
“notas sobre a implementaçã o” espalhadas neste documento.
Cada implementaçã o do Python vem com vá rios mó dulos embutidos e por padrã o. Estes estã o documentados em
library-index. Alguns mó dulos embutidos sã o mencionados ao interagirem de forma significativa com a definiçã o da
linguagem.
3
The Python Language Reference, Release 3.13.0
1.2 Notação
As descriçõ es de aná lise lé xica e sintaxe usam uma notaçã o de gramá tica de Formalismo de Backus-Naur (BNF)
modificada. Ela usa o seguinte estilo de definiçã o:
A primeira linha diz que um name é um lc_letter seguido de uma sequê ncia de zero ou mais lc_letters e
underscores. Um lc_letter por sua vez é qualquer um dos caracteres simples 'a' atravé s de 'z'. (Esta regra é
aderida pelos nomes definidos nas regras lé xicas e gramá ticas deste documento.)
Cada regra começa com um nome (no caso, o nome definido pela regra) e ::=. Uma barra vertical (|) é usada para
separar alternativas; o mesmo é o operador menos vinculativo nesta notaçã o. Uma estrela (*) significa zero ou mais
repetiçõ es do item anterior; da mesma forma, o sinal de adiçã o (+) significa uma ou mais repetiçõ es, e uma frase entre
colchetes ([ ]) significa zero ou uma ocorrê ncia (em outras palavras, a frase anexada é opcional). Os operadores *
e + se ligam tã o forte quanto possível; parê ntesis sã o usados para o agrupamento. Os literais Strings sã o delimitados
por aspas. O espaço em branco só é significativo para separar os tokens. As regras normalmente estã o contidas numa
ú nica linha; as regras com muitas alternativas podem ser formatadas alternativamente com cada linha apó s o primeiro
começo com uma barra vertical.
Nas definiçõ es lé xicas (como o exemplo acima), sã o utilizadas mais duas convençõ es: dois caracteres literais sepa-
rados por trê s pontos significam a escolha de qualquer caractere ú nico na faixa (inclusiva) fornecida pelos caracteres
ASCII. Uma frase entre colchetes angulares (<...>) fornece uma descriçã o informal do símbolo definido; por exem-
plo, isso poderia ser usado para descrever a notaçã o de ‘caractere de controle’, caso fosse necessá rio.
Embora a notaçã o utilizada seja quase a mesma, há uma grande diferença entre o significado das definiçõ es lexicais
e sintá ticas: uma definiçã o lexical opera nos caracteres individuais da fonte de entrada, enquanto uma definiçã o de
sintaxe opera no fluxo de tokens gerados pelo analisador lé xico. Todos os usos do BNF no pró ximo capítulo (“Lexical
Analysis”) sã o definiçõ es lé xicas; os usos nos capítulos subsequentes sã o definiçõ es sintá ticas.
4 Capítulo 1. Introdução
CAPÍTULO 2
Análise léxica
Um programa Python é lido por um analisador. A entrada para o analisador é um fluxo de tokens, gerado pelo
analisador léxico. Este capítulo descreve como o analisador lé xico divide um arquivo em tokens.
Python lê o texto do programa como pontos de có digo Unicode; a codificaçã o de um arquivo de origem pode ser
fornecida por uma declaraçã o de codificaçã o que por padrã o é UTF-8, consulte PEP 3120 para obter detalhes. Se o
arquivo de origem nã o puder ser decodificado, uma exceçã o SyntaxError será levantada.
2.1.3 Comentários
Um comentá rio inicia com um caracter cerquilha (#) que nã o é parte de uma string literal, e termina com o fim da
linha física. Um comentá rio significa o fim da linha ló gica a menos que regras de junçã o de linha implicitas sejam
invocadas. Comentá rios sã o ignorados pela sintaxe.
5
The Python Language Reference, Release 3.13.0
# vim:fileencoding=<nome-codificação>
Uma linha terminada em uma contrabarra nã o pode conter um comentá rio. Uma barra invertida nã o continua um
comentá rio. Uma contrabarra nã o continua um token, exceto para strings literais (ou seja, tokens diferentes de strings
literais nã o podem ser divididos em linhas físicas usando uma contrabarra). Uma contrabarra é ilegal em qualquer
outro lugar em uma linha fora de uma string literal.
Linhas continuadas implicitamente podem conter comentá rios. O recuo das linhas de continuaçã o nã o é importante.
Linhas de continuaçã o em branco sã o permitidas. Nã o há token NEWLINE entre linhas de continuaçã o implícitas.
Linhas continuadas implicitamente també m podem ocorrer dentro de strings com aspas triplas (veja abaixo); nesse
caso, eles nã o podem conter comentá rios.
uma linha em branco pode diferir dependendo da implementaçã o do interpretador. No interpretador interativo pa-
drã o, uma linha ló gica totalmente em branco (ou seja, uma que nã o contenha nem mesmo espaço em branco ou um
comentá rio) encerra uma instruçã o de vá rias linhas.
2.1.8 Indentação
O espaço em branco (espaços e tabulaçõ es) no início de uma linha ló gica é usado para calcular o nível de indentaçã o
da linha, que por sua vez é usado para determinar o agrupamento de instruçõ es.
As tabulaçõ es sã o substituídas (da esquerda para a direita) por um a oito espaços, de modo que o nú mero total de
caracteres até e incluindo a substituiçã o seja um mú ltiplo de oito (essa é intencionalmente a mesma regra usada
pelo Unix). O nú mero total de espaços que precedem o primeiro caractere nã o em branco determina o recuo da
linha. O recuo nã o pode ser dividido em vá rias linhas físicas usando contrabarra; o espaço em branco até a primeira
contrabarra determina a indentaçã o.
A indentaçã o é rejeitada como inconsistente se um arquivo de origem mistura tabulaçõ es e espaços de uma forma
que torna o significado dependente do valor de uma tabulaçã o em espaços; uma exceçã o TabError é levantada nesse
caso.
Nota de compatibilidade entre plataformas: devido à natureza dos editores de texto em plataformas nã o-UNIX,
nã o é aconselhá vel usar uma mistura de espaços e tabulaçõ es para o recuo em um ú nico arquivo de origem. Deve-se
notar també m que diferentes plataformas podem limitar explicitamente o nível má ximo de indentaçã o.
Um caractere de quebra de pá gina pode estar presente no início da linha; ele será ignorado para os cá lculos de
indentaçã o acima. Os caracteres de quebra de pá gina que ocorrem em outro lugar alé m do espaço em branco inicial
tê m um efeito indefinido (por exemplo, eles podem redefinir a contagem de espaços para zero).
Os níveis de indentaçã o das linhas consecutivas sã o usados para gerar tokens INDENT e DEDENT, usando uma
pilha, como segue.
Antes da leitura da primeira linha do arquivo, um ú nico zero é colocado na pilha; isso nunca mais será exibido. Os
nú meros colocados na pilha sempre aumentarã o estritamente de baixo para cima. No início de cada linha ló gica, o
nível de indentaçã o da linha é comparado ao topo da pilha. Se for igual, nada acontece. Se for maior, ele é colocado
na pilha e um token INDENT é gerado. Se for menor, deve ser um dos nú meros que aparecem na pilha; todos os
nú meros maiores na pilha sã o retirados e, para cada nú mero retirado, um token DEDENT é gerado. Ao final do
arquivo, um token DEDENT é gerado para cada nú mero restante na pilha que seja maior que zero.
Aqui está um exemplo de um trecho de có digo Python indentado corretamente (embora confuso):
def perm(l):
# Calcula a lista de todas as permutações de l
if len(l) <= 1:
return [l]
r = []
for i in range(len(l)):
s = l[:i] + l[i+1:]
p = perm(s)
for x in p:
[Link](l[i:i+1] + x)
return r
(Na verdade, os trê s primeiros erros sã o detectados pelo analisador sintá tico; apenas o ú ltimo erro é encontrado pelo
analisador lé xico — o recuo de nã o corresponde a um nível retirado da pilha.)
Todos os identificadores sã o convertidos no formato normal NFKC durante a aná lise; a comparaçã o de identificadores
é baseada no NFKC.
Um arquivo HTML nã o normativo listando todos os caracteres identificadores vá lidos para Unicode 15.1.0 pode ser
encontrado em [Link]
® Nota
__*__
Nomes definidos pelo sistema, informalmente conhecidos como nomes “dunder”. Esses nomes e suas imple-
mentaçõ es sã o definidos pelo interpretador (incluindo a biblioteca padrã o). Os nomes de sistema atuais sã o
discutidos na seçã o Nomes de métodos especiais e em outros lugares. Provavelmente mais nomes serã o defini-
dos em versõ es futuras do Python. Qualquer uso de nomes __*__, em qualquer contexto, que nã o siga o uso
explicitamente documentado, está sujeito a quebra sem aviso pré vio.
__*
Nomes de classes privadas. Os nomes nesta categoria, quando usados no contexto de uma definiçã o de classe,
sã o reescritos para usar uma forma desfigurada para ajudar a evitar conflitos de nomes entre atributos “privados”
de classes base e derivadas. Consulte a seçã o Identificadores (Nomes).
2.4 Literais
Literais sã o notaçõ es para valores constantes de alguns tipos embutidos.
Uma restriçã o sintá tica nã o indicada por essas produçõ es é que nã o sã o permitidos espaços em branco entre o
stringprefix ou bytesprefix e o restante do literal. O conjunto de caracteres de origem é definido pela
declaraçã o de codificaçã o; é UTF-8 se nenhuma declaraçã o de codificaçã o for fornecida no arquivo de origem; veja
a seçã o Declarações de codificação.
Em inglê s simples: ambos os tipos de literais podem ser colocados entre aspas simples (') ou aspas duplas ("). Eles
també m podem ser colocados em grupos correspondentes de trê s aspas simples ou duplas (geralmente chamadas
de strings com aspas triplas). O caractere de contrabarra (\) é usado para dar um significado especial a caracteres
comuns como , que significa ‘nova linha’ quando escapado (\n). També m pode ser usado para caracteres de escape
que, de outra forma, teriam um significado especial, como nova linha, contrabarra ou o caractere de aspas. Veja
sequências de escape abaixo para exemplos.
Literais de bytes sã o sempre prefixados com 'b' ou 'B'; eles produzem uma instâ ncia do tipo bytes em vez do tipo
str. Eles só podem conter caracteres ASCII; bytes com valor numé rico igual ou superior a 128 devem ser expressos
com escapes.
Literais de string e bytes podem opcionalmente ser prefixados com uma letra 'r' ou 'R'; tais construçõ es sã o
chamadas de literais de strings brutas e literais de bytes brutos tratam as contrabarras como caracteres literais. Como
resultado, em literais de string, os escapes '\U' e '\u' em strings brutas nã o sã o tratados de maneira especial.
Adicionado na versã o 3.3: O prefixo 'rb' de literais de bytes brutos foi adicionado como sinô nimo de 'br'.
O suporte para o literal legado unicode (u'value') foi reintroduzido para simplificar a manutençã o de bases de
có digo duplas Python 2.x e 3.x. Consulte PEP 414 para obter mais informaçõ es.
Uma string literal com 'f' ou 'F' em seu prefixo é uma string literal formatada; veja Literais de strings formatadas.
O 'f' pode ser combinado com 'r', mas nã o com 'b' ou 'u', portanto strings formatadas brutas sã o possíveis,
mas literais de bytes formatados nã o sã o.
Em literais com aspas triplas, novas linhas e aspas sem escape sã o permitidas (e sã o retidas), exceto que trê s aspas
sem escape em uma linha encerram o literal. (Uma “aspas” é o caractere usado para abrir o literal, ou seja, ' ou ".)
Sequências de escape
A menos que um prefixo 'r' ou 'R' esteja presente, as sequê ncias de escape em literais de string e bytes sã o inter-
pretadas de acordo com regras semelhantes à quelas usadas pelo Standard C. As sequê ncias de escape reconhecidas
sã o:
Notas:
(1) Uma contrabarra pode ser adicionada ao fim da linha para ignorar a nova linha:
O mesmo resultado pode ser obtido usando strings com aspas triplas, ou parê nteses e concatenação de literal
string.
(2) Como no padrã o C, sã o aceitos até trê s dígitos octais.
Alterado na versã o 3.11: Escapes octais com valor maior que 0o377 produz uma DeprecationWarning.
Alterado na versã o 3.12: Escapes octais com valor maior que 0o377 produzem um SyntaxWarning. Em
uma versã o futura do Python eles serã o eventualmente um SyntaxError.
(3) Ao contrá rio do padrã o C, sã o necessá rios exatamente dois dígitos hexadecimais.
2.4. Literais 11
The Python Language Reference, Release 3.13.0
(4) Em um literal de bytes, os escapes hexadecimais e octais denotam o byte com o valor fornecido. Em uma
literal de string, esses escapes denotam um caractere Unicode com o valor fornecido.
(5) Alterado na versã o 3.3: O suporte para apelidos de nome1 foi adicionado.
(6) Sã o necessá rios exatos quatro dígitos hexadecimais.
(7) Qualquer caractere Unicode pode ser codificado desta forma. Sã o necessá rios exatamente oito dígitos hexa-
decimais.
Ao contrá rio do padrã o C, todas as sequê ncias de escape nã o reconhecidas sã o deixadas inalteradas na string, ou
seja, a contrabarra é deixada no resultado. (Esse comportamento é ú til durante a depuraçã o: se uma sequê ncia de
escape for digitada incorretamente, a saída resultante será mais facilmente reconhecida como quebrada.) També m é
importante observar que as sequê ncias de escape reconhecidas apenas em literais de string se enquadram na categoria
de escapes nã o reconhecidos para literais de bytes.
Alterado na versã o 3.6: Sequê ncias de escape nã o reconhecidas produzem um DeprecationWarning.
Alterado na versã o 3.12: Sequê ncias de escape nã o reconhecidas produzem um SyntaxWarning. Em uma versã o
futura do Python eles serã o eventualmente um SyntaxError.
Mesmo em um literal bruto, as aspas podem ser escapadas com uma contrabarra, mas a barra invertida permanece
no resultado; por exemplo, r"\"" é uma literal de string vá lida que consiste em dois caracteres: uma contrabarra e
aspas duplas; r"\" nã o é uma literal de string vá lida (mesmo uma string bruta nã o pode terminar em um nú mero
ímpar de contrabarras). Especificamente, um literal bruto não pode terminar em uma única contrabarra (já que a
contrabarra escaparia do seguinte caractere de aspas). Observe també m que uma ú nica contrabarra seguida por uma
nova linha é interpretada como esses dois caracteres como parte do literal, não como uma continuaçã o de linha.
Observe que esse recurso é definido no nível sintá tico, mas implementado em tempo de compilaçã o. O operador ‘+’
deve ser usado para concatenar expressõ es de string em tempo de execuçã o. Observe també m que a concatenaçã o
literal pode usar diferentes estilos de delimitaçã o de strings para cada componente (mesmo misturando strings brutas
e strings com aspas triplas), e literais de string formatados podem ser concatenados com literais de string simples.
1 [Link]
| yield_expression
conversion ::= "s" | "r" | "a"
format_spec ::= (literal_char | replacement_field)*
literal_char ::= <any code point except "{", "}" or NULL>
As partes da string fora das chaves sã o tratadas literalmente, exceto que quaisquer chaves duplas '{{' ou '}}' sã o
substituídas pela chave ú nica correspondente. Uma ú nica chave de abertura '{' marca um campo de substituiçã o, que
começa com uma expressã o Python. Para exibir o texto da expressã o e seu valor apó s a avaliaçã o (ú til na depuraçã o),
um sinal de igual '=' pode ser adicionado apó s a expressã o. Um campo de conversã o, introduzido por um ponto de
exclamaçã o '!', pode vir a seguir. Um especificador de formato també m pode ser anexado, introduzido por dois
pontos ':'. Um campo de substituiçã o termina com uma chave de fechamento '}'.
Expressõ es em literais de string formatadas sã o tratadas como expressõ es regulares do Python entre parê nteses, com
algumas exceçõ es. Uma expressã o vazia nã o é permitida e as expressõ es lambda e de atribuiçã o := devem ser
colocadas entre parê nteses explícitos. Cada expressã o é avaliada no contexto onde o literal de string formatado
aparece, na ordem da esquerda para a direita. As expressõ es de substituiçã o podem conter novas linhas em strings
formatadas entre aspas simples e triplas e podem conter comentá rios. Tudo o que vem depois de um # dentro de
um campo de substituiçã o é um comentá rio (até mesmo colchetes e aspas). Nesse caso, os campos de substituiçã o
deverã o ser fechados em uma linha diferente.
Alterado na versã o 3.7: Antes do Python 3.7, uma expressã o await e compreensõ es contendo uma clá usula async
for eram ilegais nas expressõ es em literais de string formatados devido a um problema com a implementaçã o.
Alterado na versã o 3.12: Antes do Python 3.12, comentá rios nã o eram permitidos dentro de campos de substituiçã o
em f-strings.
Quando o sinal de igual '=' for fornecido, a saída terá o texto da expressã o, o '=' e o valor avaliado. Os espaços
apó s a chave de abertura '{', dentro da expressã o e apó s '=' sã o todos preservados na saída. Por padrã o, '=' faz
com que repr() da expressã o seja fornecida, a menos que haja um formato especificado. Quando um formato é
especificado, o padrã o é o str() da expressã o, a menos que uma conversã o '!r' seja declarada.
Adicionado na versã o 3.8: O sinal de igual '='.
Se uma conversã o for especificada, o resultado da avaliaçã o da expressã o será convertido antes da formataçã o. A
conversã o '!s' chama str() no resultado, '!r' chama repr() e '!a' chama ascii().
O resultado é entã o formatado usando o protocolo format(). O especificador de formato é passado para o mé todo
__format__() da expressã o ou resultado da conversã o. Uma string vazia é passada quando o especificador de
formato é omitido. O resultado formatado é entã o incluído no valor final de toda a string.
Os especificadores de formato de nível superior podem incluir campos de substituiçã o aninhados. Esses campos
aninhados podem incluir seus pró prios campos de conversã o e especificadores de formato, mas podem nã o incluir
campos de substituiçã o aninhados mais profundamente. A minilinguagem do especificador de formato é a mesma
usada pelo mé todo [Link]().
Literais de string formatados podem ser concatenados, mas os campos de substituiçã o nã o podem ser divididos entre
literais.
Alguns exemplos de literais de string formatados:
2.4. Literais 13
The Python Language Reference, Release 3.13.0
>>> a = dict(x=2)
>>> f"abc {a["x"]} def"
'abc 2 def'
Alterado na versã o 3.12: Antes do Python 3.12, a reutilizaçã o do mesmo tipo de aspas da f-string externa dentro de
um campo de substituiçã o nã o era possível.
Contrabarras també m sã o permitidas em campos de substituiçã o e sã o avaliadas da mesma forma que em qualquer
outro contexto:
Alterado na versã o 3.12: Antes do Python 3.12, contrabarras nã o eram permitidas dentro de um campo de substi-
tuiçã o em uma f-string.
Literais de string formatados nã o podem ser usados como strings de documentaçã o, mesmo que nã o incluam expres-
sõ es.
Consulte també m PEP 498 para a proposta que adicionou literais de string formatados e [Link](), que usa
um mecanismo de string de formato relacionado.
Nã o há limite para o comprimento de literais inteiros alé m do que pode ser armazenado na memó ria disponível.
Os sublinhados sã o ignorados para determinar o valor numé rico do literal. Eles podem ser usados para agrupar dígitos
para maior legibilidade. Um sublinhado pode ocorrer entre dígitos e apó s especificadores de base como 0x.
Observe que nã o sã o permitidos zeros à esquerda em um nú mero decimal diferente de zero. Isto é para desambiguaçã o
com literais octais de estilo C, que o Python usava antes da versã o 3.0.
Alguns exemplos de literais inteiros:
Alterado na versã o 3.6: Os sublinhados agora sã o permitidos para fins de agrupamento de literais.
Observe que as partes inteiras e expoentes sã o sempre interpretadas usando base 10. Por exemplo, 077e010 é
vá lido e representa o mesmo nú mero que 77e10. O intervalo permitido de literais de ponto flutuante depende da
implementaçã o. Assim como em literais inteiros, os sublinhados sã o permitidos para agrupamento de dígitos.
Alguns exemplos de literais de ponto flutuante:
Alterado na versã o 3.6: Os sublinhados agora sã o permitidos para fins de agrupamento de literais.
2.4. Literais 15
The Python Language Reference, Release 3.13.0
Um literal imaginá rio produz um nú mero complexo com uma parte real igual a 0.0. Os nú meros complexos sã o
representados como um par de nú meros de ponto flutuante e tê m as mesmas restriçõ es em seu alcance. Para criar um
nú mero complexo com uma parte real diferente de zero, adicione um nú mero de ponto flutuante a ele, por exemplo,
(3+4j). Alguns exemplos de literais imaginá rios:
2.5 Operadores
Os seguintes tokens sã o operadores:
+ - * ** / // % @
<< >> & | ^ ~ :=
< > <= >= == !=
2.6 Delimitadores
Os seguintes tokens servem como delimitadores na gramá tica:
( ) [ ] { }
, : ! . ; @ =
-> += -= *= /= //= %=
@= &= |= ^= >>= <<= **=
O ponto també m pode ocorrer em literais de ponto flutuante e imaginá rio. Uma sequê ncia de trê s períodos tem
um significado especial como um literal de reticê ncias. A segunda metade da lista, os operadores de atribuiçã o
aumentada, servem lexicalmente como delimitadores, mas també m realizam uma operaçã o.
Os seguintes caracteres ASCII imprimíveis tê m um significado especial como parte de outros tokens ou sã o signifi-
cativos para o analisador lé xico:
' " # \
Os seguintes caracteres ASCII imprimíveis nã o sã o usados em Python. Sua ocorrê ncia fora de literais de string e
comentá rios é um erro incondicional:
$ ? `
Modelo de dados
17
The Python Language Reference, Release 3.13.0
Observe que o uso dos recursos de rastreamento ou depuraçã o da implementaçã o pode manter os objetos ativos que
normalmente seriam coletá veis. Observe també m que capturar uma exceçã o com uma instruçã o try …except pode
manter os objetos vivos.
Alguns objetos contê m referê ncias a recursos “externos”, como arquivos abertos ou janelas. Entende-se que esses
recursos sã o liberados quando o objeto é coletado como lixo, mas como a coleta de lixo nã o é garantida, tais ob-
jetos també m fornecem uma maneira explícita de liberar o recurso externo, geralmente um mé todo close(). Os
programas sã o fortemente recomendados para fechar explicitamente esses objetos. A instruçã o try …finally e a
instruçã o with fornecem maneiras convenientes de fazer isso.
Alguns objetos contê m referê ncias a outros objetos; eles sã o chamados de contêineres. Exemplos de contê ineres sã o
tuplas, listas e dicioná rios. As referê ncias fazem parte do valor de um contê iner. Na maioria dos casos, quando
falamos sobre o valor de um contê iner, nos referimos aos valores, nã o à s identidades dos objetos contidos; entretanto,
quando falamos sobre a mutabilidade de um contê iner, apenas as identidades dos objetos contidos imediatamente
estã o implícitas. Portanto, se um contê iner imutá vel (como uma tupla) conté m uma referê ncia a um objeto mutá vel,
seu valor muda se esse objeto mutá vel for alterado.
Os tipos afetam quase todos os aspectos do comportamento do objeto. Até mesmo a importâ ncia da identidade do
objeto é afetada em algum sentido: para tipos imutá veis, as operaçõ es que calculam novos valores podem realmente
retornar uma referê ncia a qualquer objeto existente com o mesmo tipo e valor, enquanto para objetos mutá veis isso
nã o é permitido. Por exemplo, apó s a = 1; b = 1, a e b podem ou nã o se referir ao mesmo objeto com o valor
um, dependendo da implementaçã o. Isto ocorre porque int é um tipo imutá vel, entã o a referê ncia a 1 pode ser
reutilizada. Este comportamento depende da implementaçã o usada, entã o nã o deve ser considerada confiá vel, mas
é algo para se estar ciente ao fazer uso de testes de identidade de objeto. No entanto, apó s c = []; d = [], c e
d tê m a garantia de referir-se a duas listas vazias diferentes e ú nicas. (Observe que e = f = [] atribui o mesmo
objeto para e e f.)
3.2.1 None
Este tipo possui um ú nico valor. Existe um ú nico objeto com este valor. Este objeto é acessado atravé s do nome
embutido None. É usado para significar a ausê ncia de um valor em muitas situaçõ es, por exemplo, ele é retornado
de funçõ es que nã o retornam nada explicitamente. Seu valor verdade é falso.
3.2.2 NotImplemented
Este tipo possui um ú nico valor. Existe um ú nico objeto com este valor. Este objeto é acessado atravé s do nome
embutido NotImplemented. Os mé todos numé ricos e mé todos de comparaçã o rica devem retornar esse valor se
nã o implementarem a operaçã o para os operandos fornecidos. (O interpretador tentará entã o a operaçã o refletida ou
alguma outra alternativa, dependendo do operador.) Nã o deve ser avaliado em um contexto booleano.
Veja a documentaçã o implementing-the-arithmetic-operations para mais detalhes.
Alterado na versã o 3.9: A avaliaçã o de NotImplemented em um contexto booleano foi descontinuada. Em-
bora atualmente seja avaliada como verdadeiro, é emitida uma exceçã o DeprecationWarning. Levantará uma
TypeError em uma versã o futura do Python.
3.2.3 Ellipsis
Este tipo possui um ú nico valor. Existe um ú nico objeto com este valor. Este objeto é acessado atravé s do literal ...
ou do nome embutido Ellipsis (reticê ncias). Seu valor verdade é verdadeiro.
3.2.4 [Link]
Esses sã o criados por literais numé ricos e retornados como resultados por operadores aritmé ticos e funçõ es aritmé ti-
cas embutidas. Os objetos numé ricos sã o imutá veis; uma vez criado, seu valor nunca muda. Os nú meros do Python
sã o, obviamente, fortemente relacionados aos nú meros matemá ticos, mas sujeitos à s limitaçõ es da representaçã o
numé rica em computadores.
As representaçõ es de string das classes numé ricas, calculadas por __repr__() e __str__(), tê m as seguintes
propriedades:
• Elas sã o literais numé ricos vá lidos que, quando passados para seu construtor de classe, produzem um objeto
com o valor do numé rico original.
• A representaçã o está na base 10, quando possível.
• Os zeros à esquerda, possivelmente com exceçã o de um ú nico zero antes de um ponto decimal, nã o sã o mos-
trados.
• Os zeros à direita, possivelmente com exceçã o de um ú nico zero apó s um ponto decimal, nã o sã o mostrados.
• Um sinal é mostrado apenas quando o nú mero é negativo.
Python distingue entre inteiros, nú meros de ponto flutuante e nú meros complexos:
[Link]
® Nota
As regras para representaçã o de inteiros tê m como objetivo fornecer a interpretaçã o mais significativa das ope-
raçõ es de deslocamento e má scara envolvendo inteiros negativos.
[Link] (float)
Estes representam nú meros de ponto flutuante de precisã o dupla no nível da má quina. Você está à mercê da arquite-
tura da má quina subjacente (e implementaçã o C ou Java) para o intervalo aceito e tratamento de estouro. Python nã o
oferece suporte a nú meros de ponto flutuante de precisã o ú nica; a economia no uso do processador e da memó ria,
que normalmente é o motivo de usá -los, é ofuscada pela sobrecarga do uso de objetos em Python, portanto, nã o há
razã o para complicar a linguagem com dois tipos de nú meros de ponto flutuante.
[Link] (complex)
Estes representam nú meros complexos como um par de nú meros de ponto flutuante de precisã o dupla no nível da
má quina. As mesmas advertê ncias se aplicam aos nú meros de ponto flutuante. As partes reais e imaginá rias de um
nú mero complexo z podem ser obtidas atravé s dos atributos somente leitura [Link] e [Link].
3.2.5 Sequências
Estes representam conjuntos ordenados finitos indexados por nú meros nã o negativos. A funçã o embutida len()
retorna o nú mero de itens de uma sequê ncia. Quando o comprimento de uma sequê ncia é n, o conjunto de índices
conté m os nú meros 0, 1, …, n-1. O item i da sequê ncia a é selecionado por a[i]. Algumas sequê ncias, incluindo
sequê ncias embutidas, interpretam subscritos negativos adicionando o comprimento da sequê ncia. Por exemplo,
a[-2] é igual a a[n-2], o penú ltimo item da sequê ncia a com comprimento n.
Sequê ncias també m provê fatiamento: a[i:j] seleciona todos os itens com índice k de forma que i <= k < j. Quando
usada como expressã o, uma fatia é uma sequê ncia do mesmo tipo. O comentá rio acima sobre índices negativos
també m se aplica a posiçõ es de fatias negativas.
Algumas sequê ncias també m suportam “fatiamento estendido” com um terceiro parâ metro de “etapa”: a[i:j:k]
seleciona todos os itens de a com índice x onde x = i + n*k, n >= 0 e i <= x < j.
As sequê ncias sã o distinguidas de acordo com sua mutabilidade:
Sequências imutáveis
Um objeto de um tipo de sequê ncia imutá vel nã o pode ser alterado depois de criado. (Se o objeto contiver referê ncias
a outros objetos, esses outros objetos podem ser mutá veis e podem ser alterados; no entanto, a coleçã o de objetos
diretamente referenciada por um objeto imutá vel nã o pode ser alterada.)
Os tipos a seguir sã o sequê ncias imutá veis:
Strings
Uma string é uma sequê ncia de valores que representam pontos de có digo Unicode. Todos os pontos de có digo
no intervalo U+0000 - U+10FFFF podem ser representados em uma string. Python nã o tem um tipo char;
em vez disso, cada ponto de có digo na string é representado como um objeto string com comprimento 1. A
funçã o embutida ord() converte um ponto de có digo de sua forma de string para um inteiro no intervalo 0
- 10FFFF; chr() converte um inteiro no intervalo 0 - 10FFFF para o objeto de string correspondente de
comprimento 1. [Link]() pode ser usado para converter uma str para bytes usando a codificaçã o
de texto fornecida, e [Link]() pode ser usado para conseguir o oposto.
Tuplas
Os itens de uma tupla sã o objetos Python arbitrá rios. Tuplas de dois ou mais itens sã o formadas por listas de
expressõ es separadas por vírgulas. Uma tupla de um item (um “singleton”) pode ser formada afixando uma
vírgula a uma expressã o (uma expressã o por si só nã o cria uma tupla, já que os parê nteses devem ser usados
para agrupamento de expressõ es). Uma tupla vazia pode ser formada por um par vazio de parê nteses.
Bytes
Um objeto bytes é um vetor imutá vel. Os itens sã o bytes de 8 bits, representados por inteiros no intervalo 0
<= x < 256. Literais de bytes (como b'abc') e o construtor embutido bytes() podem ser usados para criar
objetos bytes. Alé m disso, os objetos bytes podem ser decodificados em strings atravé s do mé todo decode().
Sequências mutáveis
As sequê ncias mutá veis podem ser alteradas apó s serem criadas. As notaçõ es de subscriçã o e fatiamento podem ser
usadas como o destino da atribuiçã o e instruçõ es del (delete, exclusã o).
® Nota
Os mó dulos collections e array fornecem exemplos adicionais de tipos de sequê ncia mutá veis.
Listas
Os itens de uma lista sã o objetos Python arbitrá rios. As listas sã o formadas colocando uma lista de expressõ es
separada por vírgulas entre colchetes. (Observe que nã o há casos especiais necessá rios para formar listas de
comprimento 0 ou 1.)
Vetores de bytes
Um objeto bytearray é um vetor mutá vel. Eles sã o criados pelo construtor embutido bytearray(). Alé m de
serem mutá veis (e, portanto, nã o-hasheá vel), os vetores de bytes fornecem a mesma interface e funcionalidade
que os objetos imutá veis bytes.
3.2.7 Mapeamentos
Eles representam conjuntos finitos de objetos indexados por conjuntos de índices arbitrá rios. A notaçã o subscrito
a[k] seleciona o item indexado por k do mapeamento a; isso pode ser usado em expressõ es e como alvo de atribui-
çõ es ou instruçõ es del. A funçã o embutida len() retorna o nú mero de itens em um mapeamento.
Atualmente, há um ú nico tipo de mapeamento intrínseco:
Dicionários
Eles representam conjuntos finitos de objetos indexados por valores quase arbitrá rios. Os ú nicos tipos de valores nã o
aceitá veis como chaves sã o os valores que contê m listas ou dicioná rios ou outros tipos mutá veis que sã o comparados
por valor em vez de por identidade de objeto, o motivo é que a implementaçã o eficiente de dicioná rios requer que
o valor de hash de uma chave permaneça constante. Os tipos numé ricos usados para chaves obedecem à s regras
normais para comparaçã o numé rica: se dois nú meros forem iguais (por exemplo, 1 e 1.0), eles podem ser usados
alternadamente para indexar a mesma entrada do dicioná rio.
Dicioná rios preservam a ordem de inserçã o, o que significa que as chaves serã o produzidas na mesma ordem em que
foram adicionadas sequencialmente no dicioná rio. Substituir uma chave existente nã o altera a ordem, no entanto,
remover uma chave e inseri-la novamente irá adicioná -la ao final em vez de manter seu lugar anterior.
Os dicioná rios sã o mutá veis; eles podem ser criados pela notaçã o {} (veja a seçã o Sintaxes de criação de dicionário).
Os mó dulos de extensã o [Link] e [Link] fornecem exemplos adicionais de tipos de mapeamento, assim como
o mó dulo collections.
Alterado na versã o 3.7: Dicioná rios nã o preservavam a ordem de inserçã o nas versõ es do Python anteriores à 3.6.
No CPython 3.6, a ordem de inserçã o foi preservada, mas foi considerada um detalhe de implementaçã o naquela
é poca, em vez de uma garantia da linguagem.
Atributo Significado
Uma referê ncia ao dicionário que conté m as variá-
function.__globals__ veis globais da funçã o – o espaço de nomes global do
mó dulo no qual a funçã o foi definida.
None ou uma tuple de cé lulas que contê m ligaçã o para
function.__closure__ os nomes especificados no atributo co_freevars do
objeto código da funçã o.
Um objeto de cé lula tem o atributo cell_contents.
Isso pode ser usado para obter o valor da cé lula, bem
como definir o valor.
Atributo Significado
A string de documentaçã o da funçã o, ou None se indis-
function.__doc__ ponível.
Os objetos de funçã o també m dã o suporte à obtençã o e definiçã o de atributos arbitrá rios, que podem ser usados, por
exemplo, para anexar metadados a funçõ es. A notaçã o de ponto de atributo regular é usada para obter e definir tais
atributos.
Detalhes da implementação do CPython: A implementaçã o atual do CPython provê apenas atributos de funçã o
em funçõ es definidas pelo usuá rio. Atributos de funçã o em funções embutido podem ser suportados no futuro.
Informaçõ es adicionais sobre a definiçã o de uma funçã o podem ser obtidas de seu objeto código (acessível atravé s do
atributo __code__).
Métodos de instância
Um objeto mé todo de instâ ncia combina uma classe, uma instâ ncia de classe e qualquer objeto chamá vel (normal-
mente uma funçã o definida pelo usuá rio).
Atributos especiais de somente leitura:
Os mé todos també m implementam o acesso (mas nã o a configuraçã o) dos atributos arbitrá rios da funçã o no objeto
função subjacente.
Objetos mé todo definidos pelo usuá rio podem ser criados ao obter um atributo de uma classe (talvez atravé s de uma
instâ ncia dessa classe), se esse atributo for um objeto função definido pelo usuá rio ou um objeto classmethod .
Quando um objeto mé todo de instâ ncia é criado recuperando um objeto função definido pelo usuá rio de uma classe
por meio de uma de suas instâ ncias, seu atributo __self__ é a instâ ncia, e o objeto mé todo é considerado vinculado.
O atributo __func__ do novo mé todo é o objeto da funçã o original.
Quando um objeto mé todo de instâ ncia é criado obtendo um objeto classmethod de uma classe ou instâ ncia, seu
atributo __self__ é a pró pria classe, e seu atributo __func__ é o objeto funçã o subjacente ao mé todo de classe.
Quando um objeto mé todo de instâ ncia é chamado, a funçã o subjacente (__func__) é chamada, inserindo a instâ ncia
de classe (__self__) na frente da lista de argumentos. Por exemplo, quando C é uma classe que conté m uma
definiçã o para uma funçã o f(), e x é uma instâ ncia de C, chamando x.f(1) é equivalente a chamar C.f(x, 1).
Quando um objeto mé todo de instâ ncia é derivado de um objeto classmethod, a “instâ ncia de classe” armazenada
em __self__ será , na verdade, a pró pria classe, de modo que chamar x.f(1) ou C.f(1) é equivalente a chamar
f(C,1) sendo f a funçã o subjacente.
É importante observar que funçõ es definidas pelo usuá rio que sã o atributos de uma instâ ncia de classe nã o sã o
convertidas em mé todos vinculados; isso somente acontece quando a funçã o é um atributo da classe.
Funções geradoras
Uma funçã o ou mé todo que usa a instruçã o yield (veja a seçã o A instrução yield) é chamada de função geradora.
Tal funçã o, quando chamada, sempre retorna um objeto iterator que pode ser usado para executar o corpo da funçã o:
chamar o mé todo iterator.__next__() do iterador fará com que a funçã o seja executada até que forneça um
valor usando a instruçã o yield. Quando a funçã o executa uma instruçã o return ou sai do fim, uma exceçã o
StopIteration é levantada e o iterador terá alcançado o fim do conjunto de valores a serem retornados.
Funções de corrotina
Uma funçã o ou um mé todo que é definida(o) usando async def é chamado de função de corrotina. Tal funçã o,
quando chamada, retorna um objeto de corrotina. Ele pode conter expressõ es await, bem como instruçõ es async
with e async for. Veja també m a seçã o Objetos corrotina.
Chamar o mé todo aiterator.__anext__ do iterador assíncrono retornará um aguardável que, quando aguardado,
será executado até fornecer um valor usando a expressã o yield. Quando a funçã o executa uma instruçã o vazia
return ou chega ao final, uma exceçã o StopAsyncIteration é levantada e o iterador assíncrono terá alcançado
o final do conjunto de valores a serem produzidos.
Funções embutidas
Um objeto funçã o embutida é um wrapper em torno de uma funçã o C. Exemplos de funçõ es embutidas sã o len()
e [Link]() (math é um mó dulo embutido padrã o). O nú mero e o tipo dos argumentos sã o determinados pela
funçã o C. Atributos especiais de somente leitura:
• __doc__ é a string de documentaçã o da funçã o, ou None se nã o estiver disponível. Veja function.__doc__.
• __name__ é o nome da funçã o. Veja function.__name__.
• __self__ é definido para None (mas veja o pró ximo item).
• __module__ é o nome do mó dulo no qual a funçã o foi definida ou None se nã o estiver disponível. Veja
function.__module__.
Métodos embutidos
Este é realmente um disfarce diferente de uma funçã o embutida, desta vez contendo um objeto passado para a funçã o
C como um argumento extra implícito. Um exemplo de mé todo embutido é [Link](), presumindo que
alist é um objeto de lista. Nesse caso, o atributo especial de somente leitura __self__ é definido como o objeto
denotado por alist. (O atributo tem a mesma semâ ntica de outros métodos de instância.)
Classes
Classes sã o chamá veis. Esses objetos normalmente agem como fá bricas para novas instâ ncias de si mesmos, mas
variaçõ es sã o possíveis para tipos de classe que substituem __new__(). Os argumentos da chamada sã o passados
para __new__() e, no caso típico, para __init__() para inicializar a nova instâ ncia.
Instâncias de classe
Instâ ncias de classes arbitrá rias podem ser tornados chamá veis definindo um mé todo __call__() em sua classe.
3.2.9 Módulos
Mó dulos sã o uma unidade organizacional bá sica do có digo Python, e sã o criados pelo sistema de importação quando
invocado pela instruçã o import, ou chamando funçõ es como importlib.import_module() e a embutida
__import__(). Um objeto mó dulo tem um espaço de nomes implementado por um objeto dicionário (este
é o dicioná rio referenciado pelo atributo __globals__ das funçõ es definidas no mó dulo). As referê ncias de atri-
butos sã o traduzidas para pesquisas neste dicioná rio, por exemplo, m.x é equivalente a m.__dict__["x"]. Um
objeto mó dulo nã o conté m o objeto có digo usado para inicializar o mó dulo (uma vez que nã o é necessá rio depois
que a inicializaçã o é concluída).
A atribuiçã o de atributo atualiza o dicioná rio de espaço de nomes do mó dulo, por exemplo, m.x = 1 é equivalente
a m.__dict__["x"] = 1.
Ϫ Cuidado
Com exceçã o de __name__, é fortemente recomendado que você confie no __spec__ e seus atributos em vez
de qualquer um dos outros atributos individuais listados nesta subseçã o. Observe que atualizar um atributo em
__spec__ nã o atualizará o atributo correspondente no pró prio mó dulo:
>>> import typing
>>> typing.__name__, typing.__spec__.name
('typing', 'typing')
>>> typing.__spec__.name = 'spelling'
>>> typing.__name__, typing.__spec__.name
('typing', 'spelling')
>>> typing.__name__ = 'keyboard_smashing'
>>> typing.__name__, typing.__spec__.name
('keyboard_smashing', 'spelling')
module.__name__
O nome usado para identificar exclusivamente o mó dulo no sistema de importaçã o. Para um mó dulo executado
diretamente, isso será definido como "__main__".
This attribute must be set to the fully qualified name of the module. It is expected to match the value of
module.__spec__.name.
module.__spec__
Um registro do estado relacionado ao sistema de importaçã o do mó dulo.
Defina como spec do módulo que foi usado ao importar o mó dulo. Veja Module specs para mais detalhes.
Adicionado na versã o 3.4.
module.__package__
O pacote ao qual um mó dulo pertence.
Se o mó dulo for de nível superior (ou seja, nã o fizer parte de nenhum pacote específico), o atributo deve ser
definido como '' (a string vazia). Caso contrá rio, deve ser definido como o nome do pacote do mó dulo (que
pode ser igual a module.__name__ se o mó dulo em si for um pacote). Veja PEP 366 para mais detalhes.
Este atributo é usado em vez de __name__ para calcular importaçõ es relativas explícitas para mó dulos prin-
cipais. O padrã o é None para mó dulos criados dinamicamente usando o construtor [Link];
use [Link].module_from_spec() em vez disso para garantir que o atributo seja definido como
str.
Deprecated since version 3.13, will be removed in version 3.15: __package__ deixará de ser definido ou
levado em consideraçã o pelo sistema de importaçã o ou biblioteca padrã o.
module.__loader__
O objeto carregador que o maquiná rio de importaçã o usou para carregar o mó dulo.
Este atributo é ú til principalmente para introspecçã o, mas pode ser usado para funcionalidades adicionais
específicas do carregador, por exemplo, para obter dados associados a um carregador.
__loader__ assume como padrã o None para mó dulos criados dinamicamente usando o construtor types.
ModuleType; use [Link].module_from_spec() para garantir que o atributo seja definido
como um objeto carregador.
É fortemetne recomendado que você use module.__spec__.loader em vez de module.__loader__.
Alterado na versã o 3.4: Este atributo agora presume o padrã o None para mó dulos criados dinamicamente
usando o construtor [Link]. Anteriormente, o atributo era opcional.
Deprecated since version 3.12, will be removed in version 3.14: A definiçã o __loader__ em um mó dulo en-
quanto falha na definiçã o de __spec__.loader está descontinuado. No Python 3.14, __loader__ deixará
de ser definido ou levado em consideraçã o pelo sistema de importaçã o ou pela biblioteca padrã o.
module.__path__
Uma sequência (possivelmente vazia) de strings enumerando os locais onde os submó dulos do pacote serã o en-
contrados. Mó dulos que nã o sejam de pacote nã o devem ter um atributo __path__. Veja __path__ attributes
on modules para mais detalhes.
É fortemente recomendado que você use module.__spec__.submodule_search_locations em vez
de module.__path__.
module.__file__
module.__cached__
__file__ e __cached__ sã o atributos opcionais que podem ou nã o ser definidos. Ambos os atributos devem
ser um str quando estiverem disponíveis.
__file__ indica o nome do caminho do arquivo do qual o mó dulo foi carregado (se carregado de um arquivo)
ou o nome do caminho do arquivo da biblioteca compartilhada para mó dulos de extensã o carregados dinami-
camente de uma biblioteca compartilhada. Pode estar faltando para certos tipos de mó dulos, como mó dulos
C que estã o estaticamente vinculados ao interpretador, e o sistema de importação pode optar por deixá -lo sem
definiçã o se nã o tiver significado semâ ntico (por exemplo, um mó dulo carregado de um banco de dados).
Se __file__ estiver definido entã o o atributo __cached__ també m pode ser definido, que é o caminho para
qualquer versã o compilada do có digo (por exemplo, um arquivo compilado por byte). O arquivo nã o precisa
existir para configurar esse atributo; o caminho pode simplesmente apontar para onde o arquivo compilado
existiria (veja PEP 3147).
Observe que __cached__ pode ser definido mesmo se __file__ nã o estiver definido. No entanto, esse
cená rio é bastante atípico. Em ú ltima aná lise, o carregador é o que faz uso do spec do mó dulo fornecido pelo
localizador (do qual __file__ e __cached__ sã o derivados). Portanto, se um carregador puder carregar
a partir de um mó dulo em cache, mas nã o carregar a partir de um arquivo, esse cená rio atípico poderá ser
apropriado.
É fortemente recomendado que você use module.__spec__.cached em vez de module.__cached__.
Deprecated since version 3.13, will be removed in version 3.15: A definiçã o __cached__ em um mó dulo en-
quanto falha na definiçã o de __spec__.cached está descontinuado. No Python 3.15, __cached__ deixará
de ser definido ou levado em consideraçã o pelo sistema de importaçã o ou pela biblioteca padrã o.
module.__annotations__
Um dicioná rio contendo anotações de variável coletadas durante a execuçã o do corpo do mó dulo. Para as
melhores prá ticas sobre como trabalhar com __annotations__, por favor veja annotations-howto.
Module dictionaries
Module objects also have the following special read-only attribute:
module.__dict__
The module’s namespace as a dictionary object. Uniquely among the attributes listed here, __dict__ cannot
be accessed as a global variable from within a module; it can only be accessed as an attribute on module objects.
Detalhes da implementação do CPython: Por causa da maneira como CPython limpa dicioná rios de mó -
dulos, o dicioná rio do mó dulo será limpo quando o mó dulo sair do escopo, mesmo se o dicioná rio ainda tiver
referê ncias ativas. Para evitar isso, copie o dicioná rio ou mantenha o mó dulo por perto enquanto usa seu
dicioná rio diretamente.
Special attributes
Atributo Significado
The class’s name. See also: __name__ attributes.
type.__name__
Ϫ Cuidado
Special methods
In addition to the special attributes described above, all Python classes also have the following two methods available:
[Link]()
This method can be overridden by a metaclass to customize the method resolution order for its instances. It is
Special attributes
object.__class__
A classe à qual pertence uma instâ ncia de classe.
object.__dict__
A dictionary or other mapping object used to store an object’s (writable) attributes. Not all instances have a
__dict__ attribute; see the section on __slots__ for more details.
Objetos código
Objetos có digo representam có digo Python executá vel compilados em bytes ou bytecode. A diferença entre um objeto
có digo e um objeto funçã o é que o objeto funçã o conté m uma referê ncia explícita aos globais da funçã o (o mó dulo
no qual foi definida), enquanto um objeto có digo nã o conté m nenhum contexto; també m os valores de argumento
padrã o sã o armazenados no objeto funçã o, nã o no objeto có digo (porque eles representam os valores calculados em
tempo de execuçã o). Ao contrá rio dos objetos funçã o, os objetos có digo sã o imutá veis e nã o contê m referê ncias
(direta ou indiretamente) a objetos mutá veis.
O nome da funçã o
codeobject.co_name
Os seguintes bits sinalizadores sã o definidos para co_flags: o bit 0x04 é definido se a funçã o usa a sintaxe
*arguments para aceitar um nú mero arbitrá rio de argumentos posicionais; o bit 0x08 é definido se a funçã o usa
a sintaxe **keywords para aceitar argumentos nomeados arbitrá rios; o bit 0x20 é definido se a funçã o for um
gerador. Veja inspect-module-co-flags para detalhes na semâ ntica de cada sinalizadores que podem estar presentes.
Declaraçõ es de recursos futuros (from __future__ import division) també m usam bits em co_flags para
indicar se um objeto có digo foi compilado com um recurso específico habilitado: o bit 0x2000 é definido se a funçã o
foi compilada com divisã o futura habilitada; os bits 0x10 e 0x1000 foram usados em versõ es anteriores do Python.
Outros bits em co_flags sã o reservados para uso interno.
Se um objeto có digo representa uma funçã o, o primeiro item em co_consts é a string de documentaçã o da funçã o,
ou None se indefinido.
codeobject.co_positions()
Retorna um iterá vel das posiçõ es no có digo-fonte de cada instruçã o bytecode no objeto có digo.
O iterador retorna tuples contendo (start_line, end_line, start_column, end_column). A i-
-nésima tupla corresponde à posiçã o do có digo-fonte que compilou para a i-nésima unidade de có digo. As
informaçõ es da coluna sã o deslocamentos de bytes utf-8 indexados em 0 na linha de có digo fornecida.
A informaçã o posicional pode estar ausente. Veja uma lista nã o-exaustiva de casos onde isso pode acontecer:
• Executando o interpretador com no_debug_ranges -X.
• Carregando um arquivo pyc compilado com no_debug_ranges -X.
• Tuplas posicionais correspondendo a instruçõ es artificiais.
• Nú meros de linha e coluna que nã o podem ser representados devido a limitaçõ es específicas de imple-
mentaçã o.
Quando isso ocorre, alguns ou todos elementos da tupla podem ser None.
Adicionado na versã o 3.11.
® Nota
Esse recurso requer o armazenamento de posiçõ es de coluna no objeto có digo, o que pode resultar em
um pequeno aumento no uso de memó ria do interpretador e no uso de disco para arquivos Python com-
pilados. Para evitar armazenar as informaçõ es extras e/ou desativar a exibiçã o das informaçõ es extras
de rastreamento, use a opçã o de linha de comando no_debug_ranges -X ou a variá vel de ambiente
PYTHONNODEBUGRANGES.
codeobject.co_lines()
Retorna um iterador que produz informaçõ es sobre intervalos sucessivos de bytecodes. Cada item gerado é
uma tuple de (start, end, lineno):
• start (um int) representa o deslocamento (inclusivo) do início do intervalo bytecode
• end (um int) representa o deslocamento (exclusivo) do fim do intervalo bytecode
• lineno é um int representando o nú mero da linha do intervalo do bytecode, ou None se os bytecodes
no intervalo fornecido nã o tiverem nú mero de linha
Os itens gerados terã o as seguintes propriedades:
• O primeiro intervalo gerado terá um start de 0.
• Os intervalos (start, end) serã o nã o decrescentes e consecutivos. Ou seja, para qualquer par de
tuples, o start do segundo será igual ao end do primeiro.
• Nenhum intervalo será inverso: end >= start para todos os trios.
µ Ver também
[Link](**kwargs)
Retorna uma có pia do objeto de có digo com novos valores para os campos especificados.
Objetos de có digo també m sã o suportados pela funçã o gené rica [Link]().
Adicionado na versã o 3.8.
Objetos quadro
Objetos quadro representam quadros de execuçã o. Eles podem ocorrer em objetos traceback e també m sã o passados
para funçõ es de rastreamento registradas.
Objetos traceback
Objetos traceback representam o stack trace (situaçã o da pilha de execuçã o) de uma exceçã o. Um objeto traceback
é criado implicitamente quando ocorre uma exceçã o e també m pode ser criado explicitamente chamando types.
TracebackType.
Alterado na versã o 3.7: Objetos traceback agora podem ser instanciados explicitamente a partir de có digo Python.
Para tracebacks criados implicitamente, quando a busca por um manipulador de exceçã o desenrola a pilha de execu-
çã o, em cada nível desenrolado um objeto traceback é inserido na frente do traceback atual. Quando um manipulador
de exceçã o é inserido, o stack trace é disponibilizado para o programa. (Veja a seçã o A instrução try.) É acessível
como o terceiro item da tupla retornada por sys.exc_info(), e como o atributo __traceback__ da exceçã o
capturada.
Quando o programa nã o conté m um manipulador adequado, o stack trace é escrito (formatado de maneira ade-
quada) no fluxo de erro padrã o; se o interpretador for interativo, ele també m é disponibilizado ao usuá rio como
sys.last_traceback.
Para tracebacks criados explicitamente, cabe ao criador do traceback determinar como os atributos tb_next devem
ser vinculados para formar um stack trace completo.
Atributos especiais de somente leitura:
O nú mero da linha e a ú ltima instruçã o no traceback podem diferir do nú mero da linha do seu objeto quadro se a
exceçã o ocorreu em uma instruçã o try sem clá usula except correspondente ou com uma clá usula finally .
traceback.tb_next
O atributo especial de escrita tb_next é o pró ximo nível no stack trace (em direçã o ao quadro onde a exceçã o
ocorreu), ou None se nã o houver pró ximo nível.
Alterado na versã o 3.7: Este atributo agora é gravá vel
Objetos slice
Objetos slice sã o usados para representar fatias para mé todos __getitem__(). Eles també m sã o criados pela funçã o
embutida slice().
Atributos especiais de somente leitura: start é o limite inferior; stop é o limite superior; step é o valor da diferença
entre elementos subjacentes; cada um desses atributos é None se omitido. Esses atributos podem ter qualquer tipo.
Objetos slice tê m suporte a um mé todo:
[Link](self, length)
Este mé todo recebe um ú nico argumento inteiro length e calcula informaçõ es sobre a fatia que o objeto slice
descreveria se aplicado a uma sequê ncia de itens de length. Ele retorna uma tupla de trê s inteiros; respectiva-
́
mente, estes sã o os índices start e stop e o step ou comprimento de avanços da fatia. Indices ausentes ou fora
dos limites sã o tratados de maneira consistente com fatias regulares.
entã o x[i] é aproximadamente equivalente a type(x).__getitem__(x, i). Exceto onde mencionado, as ten-
tativas de executar uma operaçã o levantam uma exceçã o quando nenhum mé todo apropriado é definido (tipicamente
AttributeError ou TypeError).
Definir um mé todo especial para None indica que a operaçã o correspondente nã o está disponível. Por exemplo, se
uma classe define __iter__() para None, a classe nã o é iterá vel, entã o chamar iter() em suas instâ ncias irá
levantar um TypeError (sem retroceder para __getitem__()).2
Ao implementar uma classe que emula qualquer tipo embutido, é importante que a emulaçã o seja implementada
apenas na medida em que faça sentido para o objeto que está sendo modelado. Por exemplo, algumas sequê ncias
podem funcionar bem com a recuperaçã o de elementos individuais, mas extrair uma fatia pode nã o fazer sentido.
(Um exemplo disso é a interface NodeList no Document Object Model do W3C.)
Porque __new__() e __init__() trabalham juntos na construçã o de objetos (__new__() para criá -lo e
__init__() para personalizá -lo), nenhum valor diferente de None pode ser retornado por __init__();
fazer isso fará com que uma TypeError seja levantada em tempo de execuçã o.
object.__del__(self )
Chamado quando a instâ ncia está prestes a ser destruída. També m é chamada de finalizador ou (incorre-
tamente) de destruidor. Se uma classe base tem um mé todo __del__(), o mé todo __del__() da classe
derivada, se houver, deve chamá -lo explicitamente para garantir a exclusã o adequada da parte da classe base
da instâ ncia.
É possível (embora nã o recomendado!) para o mé todo __del__() adiar a destruiçã o da instâ ncia criando uma
nova referê ncia a ela. Isso é chamado de ressurreição de objeto. Depende se a implementaçã o de __del__()
é chamado uma segunda vez quando um objeto ressuscitado está prestes a ser destruído; a implementaçã o atual
do CPython chama-o apenas uma vez.
2 The __hash__(), __iter__(), __reversed__(), __contains__(), __class_getitem__() and __fspath__() methods have
special handling for this. Others will still raise a TypeError, but may do so by relying on the behavior that None is not callable.
Nã o há garantia de que os mé todos __del__() sejam chamados para objetos que ainda existem quando o
interpretador sai. [Link] fornece uma maneira direta de registrar uma funçã o de limpeza a ser
chamada quando um objeto é coletado como lixo.
® Nota
del x nã o chama diretamente x.__del__() – o primeiro diminui a contagem de referê ncias para x em
um, e o segundo só é chamado quando a contagem de referê ncias de x atinge zero.
Detalhes da implementação do CPython: É possível que um ciclo de referê ncia impeça que a contagem de
referê ncia de um objeto chegue a zero. Neste caso, mais tarde, o ciclo será detectado e deletado pelo coletor de
lixo cíclico. Uma causa comum de referê ncias cíclicas é quando uma exceçã o foi capturada em uma variá vel
local. O locals do quadro entã o referencia a exceçã o, que referencia seu pró prio traceback, que referencia o
locals de todos os quadros capturados no traceback.
µ Ver também
Á Aviso
Devido à s circunstâ ncias precá rias sob as quais os mé todos __del__() sã o invocados, as exceçõ es que
ocorrem durante sua execuçã o sã o ignoradas e um aviso é impresso em [Link] em seu lugar. Em
particular:
• __del__() pode ser chamado quando um có digo arbitrá rio está sendo executado, incluindo de
qualquer thread arbitrá ria. Se __del__() precisa bloquear ou invocar qualquer outro recurso de
bloqueio, pode ocorrer um impasse, pois o recurso já pode ter sido levado pelo có digo que é inter-
rompido para executar __del__().
• __del__() pode ser executado durante o encerramento do interpretador. Como consequê ncia, as
variá veis globais que ele precisa acessar (incluindo outros mó dulos) podem já ter sido excluídas ou
definidas como None. Python garante que os globais cujo nome comece com um ú nico sublinhado
sejam excluídos de seu mó dulo antes que outros globais sejam excluídos; se nenhuma outra referê ncia
a tais globais existir, isso pode ajudar a garantir que os mó dulos importados ainda estejam disponíveis
no momento em que o mé todo __del__() for chamado.
object.__repr__(self )
Chamado pela funçã o embutida repr() para calcular a representaçã o da string “oficial” de um objeto. Se
possível, isso deve parecer uma expressã o Python vá lida que pode ser usada para recriar um objeto com o
mesmo valor (dado um ambiente apropriado). Se isso nã o for possível, uma string no formato <...alguma
descrição útil...> deve ser retornada. O valor de retorno deve ser um objeto string. Se uma classe
define __repr__(), mas nã o __str__(), entã o __repr__() també m é usado quando uma representaçã o
de string “informal” de instâ ncias daquela classe é necessá ria.
This is typically used for debugging, so it is important that the representation is information-rich and unambi-
guous. A default implementation is provided by the object class itself.
object.__str__(self )
Called by str(object), the default __format__() implementation, and the built-in function print(), to
compute the “informal” or nicely printable string representation of an object. The return value must be a str
object.
Este mé todo difere de object.__repr__() por nã o haver expectativa de que __str__() retorne uma
expressã o Python vá lida: uma representaçã o mais conveniente ou concisa pode ser usada.
A implementaçã o padrã o definida pelo tipo embutido object chama object.__repr__().
object.__bytes__(self )
Called by bytes to compute a byte-string representation of an object. This should return a bytes object. The
object class itself does not provide this method.
object.__format__(self, format_spec)
Chamado pela funçã o embutida format() e, por extensã o, avaliaçã o de literais de string formatadas e o
mé todo [Link](), para produzir uma representaçã o de string “formatada” de um objeto. O argumento
format_spec é uma string que conté m uma descriçã o das opçõ es de formataçã o desejadas. A interpretaçã o do
argumento format_spec depende do tipo que implementa __format__(), entretanto a maioria das classes
delegará a formataçã o a um dos tipos embutidos ou usará uma sintaxe de opçã o de formataçã o semelhante.
Consulte formatspec para uma descriçã o da sintaxe de formataçã o padrã o.
O valor de retorno deve ser um objeto string.
The default implementation by the object class should be given an empty format_spec string. It delegates to
__str__().
Alterado na versã o 3.4: O mé todo __format__ do pró prio object levanta uma TypeError se passada qual-
quer string nã o vazia.
Alterado na versã o 3.7: object.__format__(x, '') é agora equivalente a str(x) em vez de
format(str(x), '').
object.__lt__(self, other)
object.__le__(self, other)
object.__eq__(self, other)
object.__ne__(self, other)
object.__gt__(self, other)
object.__ge__(self, other)
Esses sã o os chamados mé todos de “comparaçã o rica”. A correspondê ncia entre os símbolos do operador e
os nomes dos mé todos é a seguinte: x<y chama x.__lt__(y), x<=y chama x.__le__(y), x==y chama
x.__eq__(y), x!=y chama x.__ne__(y), x>y chama x.__gt__(y) e x>=y chama x.__ge__(y).
Um mé todo de comparaçã o rica pode retornar o singleton NotImplemented se nã o implementar a operaçã o
para um determinado par de argumentos. Por convençã o, False e True sã o retornados para uma compa-
raçã o bem-sucedida. No entanto, esses mé todos podem retornar qualquer valor, portanto, se o operador de
comparaçã o for usado em um contexto booleano (por exemplo, na condiçã o de uma instruçã o if), Python irá
chamar bool() no valor para determinar se o resultado for verdadeiro ou falso.
Por padrã o, object implementa __eq__() usando is, retornando NotImplemented no caso de uma com-
paraçã o falsa: True if x is y else NotImplemented. Para __ne__(), por padrã o ele delega para
__eq__() e inverte o resultado a menos que seja NotImplemented. Nã o há outras relaçõ es implícitas en-
tre os operadores de comparaçã o ou implementaçõ es padrã o; por exemplo, o valor verdadeiro de (x<y or
x==y) nã o implica x<=y. Para gerar operaçõ es de ordenaçã o automaticamente a partir de uma ú nica operaçã o
raiz, consulte functools.total_ordering().
By default, the object class provides implementations consistent with Comparações de valor: equality compa-
res according to object identity, and order comparisons raise TypeError. Each default method may generate
these results directly, but may also return NotImplemented.
Veja o pará grafo sobre __hash__() para algumas notas importantes sobre a criaçã o de objetos hasheáveis
que implementam operaçõ es de comparaçã o personalizadas e sã o utilizá veis como chaves de dicioná rio.
Nã o há versõ es de argumentos trocados desses mé todos (a serem usados quando o argumento esquerdo nã o
tem suporte à operaçã o, mas o argumento direito sim); em vez disso, __lt__() e __gt__() sã o o reflexo
um do outro, __le__() e __ge__() sã o o reflexo um do outro, e __eq__() e __ne__() sã o seu pró prio
reflexo. Se os operandos sã o de tipos diferentes e o tipo do operando direito é uma subclasse direta ou indireta
do tipo do operando esquerdo, o mé todo refletido do operando direito tem prioridade, caso contrá rio, o mé todo
do operando esquerdo tem prioridade. Subclasse virtual nã o é considerada.
Quando nenhum mé todo apropriado retorna qualquer valor diferente de NotImplemented, os operadores ==
e != retornarã o para is e is not, respectivamente.
object.__hash__(self )
Chamado pela funçã o embutida hash() e para operaçõ es em membros de coleçõ es com hash incluindo set,
frozenset e dict. O mé todo __hash__() deve retornar um inteiro. A ú nica propriedade necessá ria é que
os objetos que sã o comparados iguais tenham o mesmo valor de hash; é aconselhá vel misturar os valores hash
dos componentes do objeto que també m desempenham um papel na comparaçã o dos objetos, empacotando-os
em uma tupla e fazendo o hash da tupla. Exemplo:
def __hash__(self):
return hash(([Link], [Link], [Link]))
® Nota
hash() trunca o valor retornado do mé todo __hash__() personalizado de um objeto para o tamanho de
um Py_ssize_t. Isso é normalmente 8 bytes em compilaçõ es de 64 bits e 4 bytes em compilaçõ es de
32 bits. Se o __hash__() de um objeto deve interoperar em compilaçõ es de tamanhos de bits diferentes,
certifique-se de verificar a largura em todas as compilaçõ es com suporte. Uma maneira fá cil de fazer isso
é com python -c "import sys; print(sys.hash_info.width)".
Se uma classe nã o define um mé todo __eq__(), ela també m nã o deve definir uma operaçã o __hash__(); se
define __eq__() mas nã o __hash__(), suas instâ ncias nã o serã o utilizá veis como itens em coleçõ es hasheá -
veis. Se uma classe define objetos mutá veis e implementa um mé todo __eq__(), ela nã o deve implementar
__hash__(), uma vez que a implementaçã o de coleçõ es hasheáveis requer que o valor hash de uma chave
seja imutá vel (se o valor hash do objeto mudar, estará no balde de hash errado).
User-defined classes have __eq__() and __hash__() methods by default (inherited from the object class);
with them, all objects compare unequal (except with themselves) and x.__hash__() returns an appropriate
value such that x == y implies both that x is y and hash(x) == hash(y).
Uma classe que sobrescreve __eq__() e nã o define __hash__() terá seu __hash__() implicitamente de-
finido como None. Quando o mé todo __hash__() de uma classe é None, as instâ ncias da classe levantam
uma TypeError apropriada quando um programa tenta recuperar seu valor hash, e també m será identificado
corretamente como nã o-hasheá vel ao verificar isinstance(obj, [Link]).
Se uma classe que substitui __eq__() precisa manter a implementaçã o de __hash__() de uma classe base,
o interpretador deve ser informado disso explicitamente pela configuraçã o __hash__ = <ClasseBase>.
__hash__.
Se uma classe que nã o substitui __eq__() deseja suprimir o suporte a hash, deve incluir __hash__ =
None na definiçã o de classe. Uma classe que define seu pró prio __hash__() que levanta explicitamente
uma TypeError seria incorretamente identificada como hasheá vel por uma chamada isinstance(obj,
[Link]).
® Nota
Por padrã o, os valores __hash__() dos objetos str e bytes sã o “salgados” com um valor aleató rio impre-
visível. Embora permaneçam constantes em um processo individual do Python, eles nã o sã o previsíveis
entre invocaçõ es repetidas do Python.
Isso se destina a fornecer proteçã o contra uma negaçã o de serviço causada por entradas cuidadosamente
escolhidas que exploram o pior caso de desempenho de uma inserçã o de dicioná rio, complexidade O(n2 ).
Consulte [Link] para obter detalhes.
Alterar os valores de hash afeta a ordem de iteraçã o dos conjuntos. Python nunca deu garantias sobre essa
ordem (e normalmente varia entre compilaçõ es de 32 e 64 bits).
Consulte també m PYTHONHASHSEED.
object.__bool__(self )
Called to implement truth value testing and the built-in operation bool(); should return False or True.
When this method is not defined, __len__() is called, if it is defined, and the object is considered true if its
result is nonzero. If a class defines neither __len__() nor __bool__() (which is true of the object class
itself), all its instances are considered true.
® Nota
Este mé todo ainda pode ser ignorado ao procurar mé todos especiais como resultado de invocaçã o implícita
por meio da sintaxe da linguagem ou built-in functions. Consulte Pesquisa de método especial.
Para acessos a certos atributos sensíveis, levanta um evento de auditoria object.__getattr__ com os ar-
gumentos obj e name.
object.__setattr__(self, name, value)
Chamado quando se tenta efetuar uma atribuiçã o de atributos. Esse mé todo é chamado em vez do mecanismo
normal (ou seja, armazena o valor no dicioná rio da instâ ncia). name é o nome do atributo, value é o valor a
ser atribuído a ele.
Se __setattr__() deseja atribuir a um atributo de instâ ncia, ele deve chamar o mé todo da classe base com
o mesmo nome, por exemplo, object.__setattr__(self, name, value).
Para atribuiçõ es de certos atributos sensíveis, levanta um evento de auditoria object.__setattr__ com os
argumentos obj, name e value.
object.__delattr__(self, name)
Como __setattr__(), mas para exclusã o de atributo em vez de atribuiçã o. Este mé todo só deve ser imple-
mentado se del [Link] for significativo para o objeto.
Para exclusõ es a certos atributos sensíveis, levanta um evento de auditoria object.__delattr__ com os
argumentos obj e name.
object.__dir__(self )
Called when dir() is called on the object. An iterable must be returned. dir() converts the returned iterable
to a list and sorts it.
import sys
from types import ModuleType
class VerboseModule(ModuleType):
def __repr__(self):
return f'Verbose {self.__name__}'
[Link][__name__].__class__ = VerboseModule
® Nota
Definir __getattr__ no mó dulo e configurar o __class__ do mó dulo só afeta as pesquisas feitas usando a
sintaxe de acesso ao atributo – acessar diretamente os globais do mó dulo (seja por có digo dentro do mó dulo, ou
por meio de uma referê ncia ao dicioná rio global do mó dulo) nã o tem efeito.
Alterado na versã o 3.5: O atributo de mó dulo __class__ pode agora ser escrito.
Adicionado na versã o 3.7: Atributos de mó dulo __getattr__ e __dir__.
µ Ver também
Implementando descritores
The following methods only apply when an instance of the class containing the method (a so-called descriptor class)
appears in an owner class (the descriptor must be in either the owner’s class dictionary or in the class dictionary for
one of its parents). In the examples below, “the attribute” refers to the attribute whose name is the key of the property
in the owner class’ __dict__. The object class itself does not implement any of these protocols.
object.__get__(self, instance, owner=None)
Chamado para obter o atributo da classe proprietá ria (acesso ao atributo da classe) ou de uma instâ ncia dessa
classe (acesso ao atributo da instâ ncia). O argumento opcional owner é a classe proprietá ria, enquanto instance
é a instâ ncia pela qual o atributo foi acessado, ou None quando o atributo é acessado por meio de owner.
Este mé todo deve retornar o valor do atributo calculado ou levantar uma exceçã o AttributeError.
PEP 252 especifica que __get__() é um chamá vel com um ou dois argumentos. Os pró prios descritores
embutidos do Python implementam esta especificaçã o; no entanto, é prová vel que algumas ferramentas de ter-
ceiros tenham descritores que requerem ambos os argumentos. A implementaçã o de __getattribute__()
do pró prio Python sempre passa em ambos os argumentos sejam eles requeridos ou nã o.
object.__set__(self, instance, value)
Chamado para definir o atributo em uma instâ ncia instance da classe proprietá ria para um novo valor, value.
Observe que adicionar __set__() ou __delete__() altera o tipo de descritor para um “descritor de dados”.
Consulte Invocando descritores para mais detalhes.
object.__delete__(self, instance)
Chamado para excluir o atributo em uma instâ ncia instance da classe proprietá ria.
Instâ ncias de descritores també m podem ter o atributo __objclass__ presente:
object.__objclass__
O atributo __objclass__ é interpretado pelo mó dulo inspect como sendo a classe onde este objeto foi
definido (configurar isso apropriadamente pode ajudar na introspecçã o em tempo de execuçã o dos atributos
dinâ micos da classe). Para chamá veis, pode indicar que uma instâ ncia do tipo fornecido (ou uma subclasse)
é esperada ou necessá ria como o primeiro argumento posicional (por exemplo, CPython define este atributo
para mé todos nã o acoplados que sã o implementados em C).
Invocando descritores
Em geral, um descritor é um atributo de objeto com “comportamento de ligaçã o”, cujo acesso ao atributo foi substi-
tuído por mé todos no protocolo do descritor: __get__(), __set__() e __delete__(). Se qualquer um desses
mé todos for definido para um objeto, é considerado um descritor.
O comportamento padrã o para acesso ao atributo é obter, definir ou excluir o atributo do dicioná rio de um ob-
jeto. Por exemplo, a.x tem uma cadeia de pesquisa começando com a.__dict__['x'], depois type(a).
__dict__['x'], e continunando pelas classes bases de type(a) excluindo metaclasses.
No entanto, se o valor pesquisado for um objeto que define um dos mé todos do descritor, Python pode substituir
o comportamento padrã o e invocar o mé todo do descritor. Onde isso ocorre na cadeia de precedê ncia depende de
quais mé todos descritores foram definidos e como eles foram chamados.
O ponto de partida para a invocaçã o do descritor é uma ligaçã o, a.x. Como os argumentos sã o montados depende
de a:
Chamada direta
A chamada mais simples e menos comum é quando o có digo do usuá rio invoca diretamente um mé todo des-
critor: x.__get__(a).
Ligação de instâncias
Se estiver ligando a uma instâ ncia de objeto, a.x é transformado na chamada: type(a).__dict__['x'].
__get__(a, type(a)).
Ligação de classes
Se estiver ligando a uma classe, A.x é transformado na chamada: A.__dict__['x'].__get__(None, A).
Ligação de super
Uma pesquisa pontilhada, ou dotted lookup, como super(A, a).x procura a.__class__.__mro__ por
uma classe base B seguindo A e entã o retorna B.__dict__['x'].__get__(a, A). Se nã o for um descritor,
x é retornado inalterado.
Para ligaçõ es de instâ ncias, a precedê ncia de invocaçã o do descritor depende de quais mé todos do descritor sã o
definidos. Um descritor pode definir qualquer combinaçã o de __get__(), __set__() e __delete__(). Se ele
nã o definir __get__(), entã o acessar o atributo retornará o pró prio objeto descritor, a menos que haja um valor no
dicioná rio de instâ ncia do objeto. Se o descritor define __set__() e/ou __delete__(), é um descritor de dados;
se nã o definir nenhum, é um descritor sem dados. Normalmente, os descritores de dados definem __get__()
e __set__(), enquanto os descritores sem dados tê m apenas o mé todo __get__(). Descritores de dados com
__get__() e __set__() (e/ou __delete__()) definidos sempre substituem uma redefiniçã o em um dicioná rio
de instâ ncia. Em contraste, descritores sem dados podem ser substituídos por instâ ncias.
Os mé todos Python (incluindo aqueles decorados com @staticmethod and @classmethod) sã o implementados
como descritores sem dados. Assim, as instâ ncias podem redefinir e substituir mé todos. Isso permite que instâ ncias
individuais adquiram comportamentos que diferem de outras instâ ncias da mesma classe.
A funçã o property() é implementada como um descritor de dados. Da mesma forma, as instâ ncias nã o podem
substituir o comportamento de uma propriedade.
__slots__
__slots__ permite-nos declarar explicitamente membros de dados (como propriedades) e negar a criaçã o de
__dict__ e __weakref__ (a menos que explicitamente declarado em __slots__ ou disponível em uma classe base.)
O espaço economizado com o uso de __dict__ pode ser significativo. A velocidade de pesquisa de atributos també m
pode ser significativamente melhorada.
object.__slots__
Esta variá vel de classe pode ser atribuída a uma string, iterá vel ou sequê ncia de strings com nomes de variá veis
usados por instâ ncias. __slots__ reserva espaço para as variá veis declaradas e evita a criaçã o automá tica de
__dict__ e __weakref__ para cada instâ ncia.
Observaçõ es ao uso de __slots__:
• Ao herdar de uma classe sem __slots__, os atributos __dict__ e __weakref__ das instâ ncias sempre estarã o
acessíveis.
• Sem uma variá vel __dict__, as instâ ncias nã o podem ser atribuídas a novas variá veis nã o listadas na definiçã o
__slots__. As tentativas de atribuir a um nome de variá vel nã o listado levantam AttributeError. Se a
atribuiçã o dinâ mica de novas variá veis for desejada, entã o adicione '__dict__' à sequê ncia de strings na
declaraçã o de __slots__.
• Sem uma variá vel __weakref__ para cada instâ ncia, as classes que definem __slots__ nã o suportam
referências fracas para suas instâ ncias. Se for necessá rio um suporte de referê ncia fraca, adicione
'__weakref__' à sequê ncia de strings na declaraçã o __slots__.
• __slots__ sã o implementados no nível de classe criando descritores para cada nome de variá vel. Como re-
sultado, os atributos de classe nã o podem ser usados para definir valores padrã o para variá veis de instâ ncia
definidas por __slots__; caso contrá rio, o atributo de classe substituiria a atribuiçã o do descritor.
• The action of a __slots__ declaration is not limited to the class where it is defined. __slots__ declared in parents
are available in child classes. However, instances of a child subclass will get a __dict__ and __weakref__
unless the subclass also defines __slots__ (which should only contain names of any additional slots).
• Se uma classe define um slot també m definido em uma classe base, a variá vel de instâ ncia definida pelo slot
da classe base fica inacessível (exceto por recuperar seu descritor diretamente da classe base). Isso torna o
significado do programa indefinido. No futuro, uma verificaçã o pode ser adicionada para evitar isso.
• TypeError será levantada se __slots__ nã o vazios forem definidos para uma classe derivada de um tipo em-
butido "variable-length" como int, bytes e tuple.
• Qualquer iterável nã o string pode ser atribuído a __slots__.
• Se um dicionário for usado para atribuir __slots__, as chaves do dicioná rio serã o usadas como os nomes
dos slots. Os valores do dicioná rio podem ser usados para fornecer strings de documentaçã o (docstrings) por
atributo que serã o reconhecidos por [Link]() e exibidos na saída de help().
• __class__ assignment works only if both classes have the same __slots__.
• A herança mú ltipla com vá rias classes bases com slots pode ser usada, mas apenas uma classe base tem per-
missã o para ter atributos criados por slots (as outras classes bases devem ter layouts de slots vazios) – violaçõ es
levantam TypeError.
• Se um iterador for usado para __slots__, um descritor é criado para cada um dos valores do iterador. No
entanto, o atributo __slots__ será um iterador vazio.
classmethod object.__init_subclass__(cls)
Este mé todo é chamado sempre que a classe que conté m é uma subclasse. cls é entã o a nova subclasse. Se
definido como um mé todo de instâ ncia normal, esse mé todo é convertido implicitamente em um mé todo de
classe.
Keyword arguments which are given to a new class are passed to the parent class’s __init_subclass__.
For compatibility with other classes using __init_subclass__, one should take out the needed keyword
arguments and pass the others over to the base class, as in:
class Philosopher:
def __init_subclass__(cls, /, default_name, **kwargs):
super().__init_subclass__(**kwargs)
cls.default_name = default_name
A implementaçã o padrã o de object.__init_subclass__ nã o faz nada, mas levanta um erro se for cha-
mada com quaisquer argumentos.
® Nota
A dica da metaclasse metaclass é consumida pelo resto da maquinaria de tipo, e nunca é passada para
implementaçõ es __init_subclass__. A metaclasse real (em vez da dica explícita) pode ser acessada
como type(cls).
class A:
x = C() # Automatically calls: x.__set_name__(A, 'x')
Se a variá vel de classe for atribuída apó s a criaçã o da classe, __set_name__() nã o será chamado automati-
camente. Se necessá rio, __set_name__() pode ser chamado diretamente:
class A:
pass
c = C()
A.x = c # The hook is not called
c.__set_name__(A, 'x') # Manually invoke the hook
Metaclasses
Por padrã o, as classes sã o construídas usando type(). O corpo da classe é executado em um novo espaço de nomes
e o nome da classe é vinculado localmente ao resultado de type(name, bases, namespace).
O processo de criaçã o da classe pode ser personalizado passando o argumento nomeado metaclass na linha de
definiçã o da classe, ou herdando de uma classe existente que incluiu tal argumento. No exemplo a seguir, MyClass
e MySubclass sã o instâ ncias de Meta:
class Meta(type):
pass
class MyClass(metaclass=Meta):
pass
class MySubclass(MyClass):
pass
Quaisquer outros argumentos nomeados especificados na definiçã o de classe sã o transmitidos para todas as operaçõ es
de metaclasse descritas abaixo.
Quando uma definiçã o de classe é executada, as seguintes etapas ocorrem:
• entradas de MRO sã o resolvidas;
• a metaclasse apropriada é determinada;
• o espaço de nomes da classe é preparada;
• o corpo da classe é executado;
• o objeto da classe é criado.
µ Ver também
types.resolve_bases()
Dinamicamente resolve bases que nã o sã o instâ ncias de type.
types.get_original_bases()
Recupera as “bases originais” de uma classe antes das modificaçõ es feitas por __mro_entries__().
PEP 560
Suporte bá sico para mó dulo typing e tipos gené ricos.
A metaclasse mais derivada é selecionada a partir da metaclasse explicitamente especificada (se houver) e das me-
taclasses (ou seja, type(cls)) de todas as classes bases especificadas. A metaclasse mais derivada é aquela que é
um subtipo de todas essas metaclasses candidatas. Se nenhuma das metaclasses candidatas atender a esse crité rio, a
definiçã o de classe falhará com TypeError.
µ Ver também
2) Esses mé todos __set_name__ sã o chamados com a classe sendo definida e o nome atribuído para este atributo
específico;
3) O gancho __init_subclass__() é chamado na classe base imediata da nova classe em sua ordem de reso-
luçã o de mé todo.
Depois que o objeto classe é criado, ele é passado para os decoradores de classe incluídos na definiçã o de classe (se
houver) e o objeto resultante é vinculado ao espaço de nomes local como a classe definida.
When a new class is created by type.__new__, the object provided as the namespace parameter is copied to a new
ordered mapping and the original object is discarded. The new copy is wrapped in a read-only proxy, which becomes
the __dict__ attribute of the class object.
µ Ver também
Em particular, a metaclasse [Link] implementa esses mé todos a fim de permitir a adiçã o de classes base
abstratas (ABCs) como “classes base virtuais” para qualquer classe ou tipo (incluindo tipos embutidos), incluindo
outras ABCs.
type.__instancecheck__(self, instance)
Retorna verdadeiro se instance deve ser considerada uma instâ ncia (direta ou indireta) da classe class. Se
definido, chamado para implementar isinstance(instance, class).
type.__subclasscheck__(self, subclass)
Retorna verdadeiro se subclass deve ser considerada uma subclasse (direta ou indireta) da classe class. Se
definido, chamado para implementar issubclass(subclass, class).
Observe que esses mé todos sã o pesquisados no tipo (metaclasse) de uma classe. Eles nã o podem ser definidos como
mé todos de classe na classe real. Isso é consistente com a pesquisa de mé todos especiais que sã o chamados em
instâ ncias, apenas neste caso a pró pria instâ ncia é uma classe.
µ Ver também
µ Ver também
Uma classe pode geralmente ser parametrizada somente se ela define o mé todo de classe especial
__class_getitem__().
O propósito de __class_getitem__
O propó sito de __class_getitem__() é permitir a parametrizaçã o em tempo de execuçã o de classes gené ricas
da biblioteca padrã o, a fim de aplicar mais facilmente dicas de tipo a essas classes.
Para implementar classes gené ricas personalizadas que podem ser parametrizadas em tempo de execuçã o e com-
preendidas por verificadores de tipo está ticos, os usuá rios devem herdar de uma classe da biblioteca padrã o que já
implementa __class_getitem__(), ou herdar de [Link], que possui sua pró pria implementaçã o de
__class_getitem__().
Implementaçõ es personalizadas de __class_getitem__() em classes definidas fora da biblioteca padrã o podem
nã o ser compreendidas por verificadores de tipo de terceiros, como o mypy. O uso de __class_getitem__() em
qualquer classe para fins diferentes de dicas de tipo é desencorajado.
class_of_obj = type(obj)
Em Python, todas as classes sã o elas mesmas instâ ncias de outras classes. A classe de uma classe é conhecida
como metaclasse dessa classe, e a maioria das classes tem a classe type como sua metaclasse. type nã o define
__getitem__(), o que significa que expressõ es como list[int], dict[str, float] e tuple[str, bytes]
resultam em chamadas para __class_getitem__():
>>> # list has class "type" as its metaclass, like most classes:
>>> type(list)
<class 'type'>
>>> type(dict) == type(list) == type(tuple) == type(str) == type(bytes)
True
>>> # "list[int]" calls "list.__class_getitem__(int)"
>>> list[int]
list[int]
>>> # list.__class_getitem__ returns a GenericAlias object:
>>> type(list[int])
<class '[Link]'>
No entanto, se uma classe tiver uma metaclasse personalizada que define __getitem__(), subscrever a classe pode
resultar em comportamento diferente. Um exemplo disso pode ser encontrado no mó dulo enum:
µ Ver também
® Nota
O fatiamento é feito exclusivamente com os trê s mé todos a seguir. Uma chamada como
a[1:2] = b
é traduzida com
a[slice(1, 2, None)] = b
e assim por diante. Os itens de fatia ausentes sã o sempre preenchidos com None.
object.__getitem__(self, key)
Called to implement evaluation of self[key]. For sequence types, the accepted keys should be integers.
Optionally, they may support slice objects as well. Negative index support is also optional. If key is of an
inappropriate type, TypeError may be raised; if key is a value outside the set of indexes for the sequence
(after any special interpretation of negative values), IndexError should be raised. For mapping types, if key
is missing (not in the container), KeyError should be raised.
® Nota
Os loops for esperam que uma IndexError seja levantada para índices ilegais para permitir a detecçã o
apropriada do fim da sequê ncia.
® Nota
When subscripting a class, the special class method __class_getitem__() may be called instead of
__getitem__(). See __class_getitem__ versus __getitem__ for more details.
object.__sub__(self, other)
object.__mul__(self, other)
object.__matmul__(self, other)
object.__truediv__(self, other)
object.__floordiv__(self, other)
object.__mod__(self, other)
object.__divmod__(self, other)
object.__pow__(self, other , modulo ) [ ]
object.__lshift__(self, other)
object.__rshift__(self, other)
object.__and__(self, other)
object.__xor__(self, other)
object.__or__(self, other)
These methods are called to implement the binary arithmetic operations (+, -, *, @, /, //, %, divmod(),
pow(), **, <<, >>, &, ^, |). For instance, to evaluate the expression x + y, where x is an instance of a class
that has an __add__() method, type(x).__add__(x, y) is called. The __divmod__() method should
be the equivalent to using __floordiv__() and __mod__(); it should not be related to __truediv__().
Note that __pow__() should be defined to accept an optional third argument if the ternary version of the
built-in pow() function is to be supported.
If one of those methods does not support the operation with the supplied arguments, it should return
NotImplemented.
object.__radd__(self, other)
object.__rsub__(self, other)
object.__rmul__(self, other)
object.__rmatmul__(self, other)
object.__rtruediv__(self, other)
object.__rfloordiv__(self, other)
object.__rmod__(self, other)
object.__rdivmod__(self, other)
object.__rpow__(self, other , modulo ) [ ]
object.__rlshift__(self, other)
object.__rrshift__(self, other)
object.__rand__(self, other)
object.__rxor__(self, other)
object.__ror__(self, other)
These methods are called to implement the binary arithmetic operations (+, -, *, @, /, //, %, divmod(),
pow(), **, <<, >>, &, ^, |) with reflected (swapped) operands. These functions are only called if the left
operand does not support the corresponding operation3 and the operands are of different types.4 For instance,
to evaluate the expression x - y, where y is an instance of a class that has an __rsub__() method, type(y).
__rsub__(y, x) is called if type(x).__sub__(x, y) returns NotImplemented.
Note que terná rio pow() nã o tentará chamar __rpow__() (as regras de coerçã o se tornariam muito compli-
cadas).
3 “Does not support” here means that the class has no such method, or the method returns NotImplemented. Do not set the method to None
if you want to force fallback to the right operand’s reflected method—that will instead have the opposite effect of explicitly blocking such fallback.
4 For operands of the same type, it is assumed that if the non-reflected method – such as __add__() – fails then the overall operation is not
® Nota
Se o tipo do operando direito for uma subclasse do tipo do operando esquerdo e essa subclasse fornecer
uma implementaçã o diferente do mé todo refletido para a operaçã o, este mé todo será chamado antes do
mé todo nã o refletido do operando esquerdo. Esse comportamento permite que as subclasses substituam as
operaçõ es de seus ancestrais.
object.__iadd__(self, other)
object.__isub__(self, other)
object.__imul__(self, other)
object.__imatmul__(self, other)
object.__itruediv__(self, other)
object.__ifloordiv__(self, other)
object.__imod__(self, other)
[
object.__ipow__(self, other , modulo ) ]
object.__ilshift__(self, other)
object.__irshift__(self, other)
object.__iand__(self, other)
object.__ixor__(self, other)
object.__ior__(self, other)
These methods are called to implement the augmented arithmetic assignments (+=, -=, *=, @=, /=, //=, %=,
**=, <<=, >>=, &=, ^=, |=). These methods should attempt to do the operation in-place (modifying self) and
return the result (which could be, but does not have to be, self). If a specific method is not defined, or if that
method returns NotImplemented, the augmented assignment falls back to the normal methods. For instance,
if x is an instance of a class with an __iadd__() method, x += y is equivalent to x = x.__iadd__(y)
. If __iadd__() does not exist, or if x.__iadd__(y) returns NotImplemented, x.__add__(y) and y.
__radd__(x) are considered, as with the evaluation of x + y. In certain situations, augmented assignment
can result in unexpected errors (see faq-augmented-assignment-tuple-error), but this behavior is in fact part of
the data model.
object.__neg__(self )
object.__pos__(self )
object.__abs__(self )
object.__invert__(self )
Chamado para implementar as operaçõ es aritmé ticas uná rias (-, +, abs() e ~).
object.__complex__(self )
object.__int__(self )
object.__float__(self )
Chamado para implementar as funçõ es embutidas complex(), int() e float(). Deve retornar um valor
do tipo apropriado.
object.__index__(self )
Chamado para implementar [Link](), e sempre que o Python precisar converter sem perdas o
objeto numé rico em um objeto inteiro (como no fatiamento ou nas funçõ es embutidas bin(), hex() e oct()).
A presença deste mé todo indica que o objeto numé rico é do tipo inteiro. Deve retornar um nú mero inteiro.
Se __int__(), __float__() e __complex__() nã o estiverem definidos, funçõ es embutidas correspon-
dentes int(), float() e complex() recorre a __index__().
[
object.__round__(self , ndigits ) ]
object.__trunc__(self )
object.__floor__(self )
object.__ceil__(self )
Chamado para implementar as funçõ es embutidas round() e trunc(), floor() e ceil() de math. A
menos que ndigits sejam passados para __round__() todos estes mé todos devem retornar o valor do objeto
truncado para um Integral (tipicamente um int).
The built-in function int() falls back to __trunc__() if neither __int__() nor __index__() is defined.
Alterado na versã o 3.11: The delegation of int() to __trunc__() is deprecated.
Se uma exceçã o for fornecida e o mé todo desejar suprimir a exceçã o (ou seja, evitar que ela seja propagada),
ele deve retornar um valor verdadeiro. Caso contrá rio, a exceçã o será processada normalmente ao sair deste
mé todo.
Note that __exit__() methods should not reraise the passed-in exception; this is the caller’s responsibility.
µ Ver também
µ Ver também
µ Ver também
>>> class C:
... pass
...
>>> c = C()
>>> c.__len__ = lambda: 5
>>> len(c)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type 'C' has no len()
The rationale behind this behaviour lies with a number of special methods such as __hash__() and __repr__()
that are implemented by all objects, including type objects. If the implicit lookup of these methods used the con-
ventional lookup process, they would fail when invoked on the type object itself:
A tentativa incorreta de invocar um mé todo nã o vinculado de uma classe dessa maneira é à s vezes referida como
“confusã o de metaclasse” e é evitada ignorando a instâ ncia ao pesquisar mé todos especiais:
In addition to bypassing any instance attributes in the interest of correctness, implicit special method lookup generally
also bypasses the __getattribute__() method even of the object’s metaclass:
Bypassing the __getattribute__() machinery in this fashion provides significant scope for speed optimisations
within the interpreter, at the cost of some flexibility in the handling of special methods (the special method must be
set on the class object itself in order to be consistently invoked by the interpreter).
3.4 Corrotinas
3.4.1 Objetos aguardáveis
An awaitable object generally implements an __await__() method. Coroutine objects returned from async def
functions are awaitable.
® Nota
The generator iterator objects returned from generators decorated with [Link]() are also awaitable,
but they do not implement __await__().
3.4. Corrotinas 57
The Python Language Reference, Release 3.13.0
object.__await__(self )
Must return an iterator. Should be used to implement awaitable objects. For instance, [Link]
implements this method to be compatible with the await expression. The object class itself is not awaitable
and does not provide this method.
® Nota
The language doesn’t place any restriction on the type or value of the objects yielded by the iterator returned
by __await__, as this is specific to the implementation of the asynchronous execution framework (e.g.
asyncio) that will be managing the awaitable object.
µ Ver também
class Reader:
async def readline(self):
...
def __aiter__(self):
return self
class AsyncContextManager:
async def __aenter__(self):
await log('entering context')
3.4. Corrotinas 59
The Python Language Reference, Release 3.13.0
Modelo de execução
61
The Python Language Reference, Release 3.13.0
• instruçõ es type.
• listas de parâmetros de tipo.
A instruçã o import no formato from ... import * liga todos os nomes definidos no mó dulo importado, exceto
aqueles que começam com um sublinhado. Este formulá rio só pode ser usado no nível do mó dulo.
Um alvo ocorrendo em uma instruçã o del també m é considerado ligado a esse propó sito (embora a semâ ntica real
seja para desligar do nome).
Cada atribuiçã o ou instruçã o de importaçã o ocorre dentro de um bloco definido por uma definiçã o de classe ou funçã o
ou no nível do mó dulo (o bloco de có digo de nível superior).
Se um nome está ligado a um bloco, é uma variá vel local desse bloco, a menos que declarado como nonlocal ou
global. Se um nome está ligado a nível do mó dulo, é uma variá vel global. (As variá veis do bloco de có digo do
mó dulo sã o locais e globais.) Se uma variá vel for usada em um bloco de có digo, mas nã o definida lá , é uma variável
livre.
Cada ocorrê ncia de um nome no texto do programa se refere à ligação daquele nome estabelecido pelas seguintes
regras de resoluçã o de nome.
có digo de mé todos. Isso inclui compreensõ es e expressõ es geradoras, mas nã o inclui escopos de anotação, que tê m
acesso a seus escopos de classe delimitadores. Isso significa que o seguinte falhará :
class A:
a = 42
b = list(a + i for i in range(10))
class A:
type Alias = Nested
class Nested: pass
Exemplo:
Aqui a exceçã o é levantada apenas quando o atributo __value__ do apelido de tipo ou o atributo __bound__ da
variá vel de tipo é acessado.
Esse comportamento é ú til principalmente para referê ncias a tipos que ainda nã o foram definidos quando o alias
de tipo ou variá vel de tipo é criado. Por exemplo, a avaliaçã o preguiçosa permite a criaçã o de apelidos de tipo
mutuamente recursivos:
Valores avaliados preguiçosamente sã o avaliados em escopo de anotação, o que significa que os nomes que apare-
cem dentro do valor avaliado preguiçosamente sã o pesquisados como se fossem usados no escopo imediatamente
envolvente.
Adicionado na versã o 3.12.
i = 10
def f():
print(i)
i = 42
f()
As funçõ es eval() e exec() nã o tê m acesso ao ambiente completo para resoluçã o de nome. Os nomes podem ser
resolvidos nos espaços de nomes locais e globais do chamador. Variá veis livres nã o sã o resolvidas no espaço de nomes
mais pró ximo, mas no espaço de nomes global.1 As funçõ es exec() e eval() possuem argumentos opcionais para
1 Essa limitaçã o ocorre porque o có digo executado por essas operaçõ es nã o está disponível no momento em que o mó dulo é compilado.
substituir o espaço de nomes global e local. Se apenas um espaço de nomes for especificado, ele será usado para
ambos.
4.3 Exceções
As exceçõ es sã o um meio de romper o fluxo normal de controle de um bloco de có digo para tratar erros ou outras
condiçõ es excepcionais. Uma exceçã o é levantada no ponto em que o erro é detectado; ele pode ser tratado pelo
bloco de có digo circundante ou por qualquer bloco de có digo que invocou direta ou indiretamente o bloco de có digo
onde ocorreu o erro.
O interpretador Python levanta uma exceçã o quando detecta um erro em tempo de execuçã o (como divisã o por zero).
Um programa Python també m pode levantar explicitamente uma exceçã o com a instruçã o raise. Os tratadores de
exceçã o sã o especificados com a instruçã o try … except. A clá usula finally de tal declaraçã o pode ser usada
para especificar o có digo de limpeza que nã o trata a exceçã o, mas é executado se uma exceçã o ocorreu ou nã o no
có digo anterior.
Python usa o modelo de “terminaçã o” da manipulaçã o de erros: um manipulador de exceçã o pode descobrir o que
aconteceu e continuar a execuçã o em um nível externo, mas nã o pode reparar a causa do erro e tentar novamente a
operaçã o com falha (exceto reinserindo a parte incorreta de có digo de cima).
Quando uma exceçã o nã o é manipulada, o interpretador encerra a execuçã o do programa ou retorna ao seu laço
principal interativo. Em ambos os casos, ele exeibe um traceback (situaçã o da pilha de execuçã o), exceto quando a
exceçã o é SystemExit.
As exceçõ es sã o identificadas por instâ ncias de classe. A clá usula except é selecionada dependendo da classe da
instâ ncia: ela deve referenciar a classe da instâ ncia ou uma classe base não-virtual dela. A instâ ncia pode ser recebida
pelo manipulador e pode conter informaçõ es adicionais sobre a condiçã o excepcional.
® Nota
As mensagens de exceçã o nã o fazem parte da API do Python. Seu conteú do pode mudar de uma versã o do Python
para outra sem aviso e nã o deve ser invocado pelo có digo que será executado em vá rias versõ es do interpretador.
Veja també m a descriçã o da declaraçã o try na seçã o A instrução try e a instruçã o raise na seçã o A instrução raise.
4.3. Exceções 65
The Python Language Reference, Release 3.13.0
O sistema de importação
O có digo Python em um módulo obté m acesso ao có digo em outro mó dulo pelo processo de importação dele. A
instruçã o import é a maneira mais comum de invocar o mecanismo de importaçã o, mas nã o é a ú nica maneira.
Funçõ es como importlib.import_module() e a funçã o embutida __import__() també m podem ser usadas
para chamar o mecanismo de importaçã o.
A instruçã o import combina duas operaçõ es; ela procura o mó dulo nomeado e vincula os resultados dessa pesquisa
a um nome no escopo local. A operaçã o de busca da instruçã o import é definida como uma chamada para a funçã o
__import__(), com os argumentos apropriados. O valor de retorno de __import__() é usado para executar a
operaçã o de ligaçã o de nome da instruçã o import. Veja a instruçã o import para os detalhes exatos da operaçã o de
ligaçã o desse nome.
Uma chamada direta para __import__() realiza apenas a pesquisa do mó dulo e, se encontrada, a operaçã o de
criaçã o do mó dulo. Embora certos efeitos colaterais possam ocorrer, como a importaçã o de pacotes pai e a atualizaçã o
de vá rios caches (incluindo [Link]), apenas a instruçã o import realiza uma operaçã o de ligaçã o de nome.
Quando uma instruçã o import é executada, a funçã o embutida padrã o __import__() é chamada. Outros me-
canismos para chamar o sistema de importaçã o (como importlib.import_module()) podem optar por ignorar
__import__() e usar suas pró prias soluçõ es para implementar a semâ ntica de importaçã o.
Quando um mó dulo é importado pela primeira vez, o Python procura pelo mó dulo e, se encontrado, cria um ob-
jeto de mó dulo1 , inicializando-o. Se o mó dulo nomeado nã o puder ser encontrado, uma ModuleNotFoundError
será levantada. O Python implementa vá rias estraté gias para procurar o mó dulo nomeado quando o mecanismo de
importaçã o é chamado. Essas estraté gias podem ser modificadas e estendidas usando vá rios ganchos descritos nas
seçõ es abaixo.
Alterado na versã o 3.3: O sistema de importaçã o foi atualizado para implementar completamente a segunda fase
da PEP 302. Nã o há mais um mecanismo de importaçã o implícito – o sistema completo de importaçã o é exposto
atravé s de sys.meta_path. Alé m disso, o suporte nativo a pacote de espaço de nomes foi implementado (consulte
PEP 420).
5.1 importlib
O mó dulo importlib fornece uma API rica para interagir com o sistema de importaçã o. Por exemplo, importlib.
import_module() fornece uma API mais simples e recomendada do que a funçã o embutida __import__()
para chamar o mecanismo de importaçã o. Consulte a documentaçã o da biblioteca importlib para obter detalhes
adicionais.
1 Veja [Link].
67
The Python Language Reference, Release 3.13.0
5.2 Pacotes
O Python possui apenas um tipo de objeto de mó dulo e todos os mó dulos sã o desse tipo, independentemente de o
mó dulo estar implementado em Python, C ou qualquer outra coisa. Para ajudar a organizar os mó dulos e fornecer
uma hierarquia de nomes, o Python tem o conceito de pacotes.
Você pode pensar em pacotes como os diretó rios em um sistema de arquivos e os mó dulos como arquivos nos
diretó rios, mas nã o tome essa analogia muito literalmente, já que pacotes e mó dulos nã o precisam se originar do
sistema de arquivos. Para os fins desta documentaçã o, usaremos essa analogia conveniente de diretó rios e arquivos.
Como os diretó rios do sistema de arquivos, os pacotes sã o organizados hierarquicamente e os pró prios pacotes podem
conter subpacotes e mó dulos regulares.
É importante ter em mente que todos os pacotes sã o mó dulos, mas nem todos os mó dulos sã o pacotes. Ou, dito de
outra forma, os pacotes sã o apenas um tipo especial de mó dulo. Especificamente, qualquer mó dulo que contenha um
atributo __path__ é considerado um pacote.
Todo mó dulo tem um nome. Nomes de subpacotes sã o separados do nome do pacote por um ponto, semelhante à
sintaxe de acesso aos atributos padrã o do Python. Assim pode ter um pacote chamado email, que por sua vez tem
um subpacote chamado [Link] e um mó dulo dentro dele chamado [Link].
parent/
__init__.py
one/
__init__.py
two/
__init__.py
three/
__init__.py
5.3.4 O metacaminho
When the named module is not found in [Link], Python next searches sys.meta_path, which contains
a list of meta path finder objects. These finders are queried in order to see if they know how to handle the named
module. Meta path finders must implement a method called find_spec() which takes three arguments: a name,
an import path, and (optionally) a target module. The meta path finder can use any strategy it wants to determine
whether it can handle the named module or not.
Se o localizador de metacaminho souber como tratar o mó dulo nomeado, ele retorna um objeto com especificaçõ es.
Se ele nã o puder tratar o mó dulo nomeado, ele retorna None. Se o processamento de sys.meta_path alcançar
o fim da sua lista sem retornar uma especificaçã o, entã o ModuleNotFoundError é levantada. Qualquer outras
exceçõ es levantadas sã o simplesmente propagadas para cima, abortando o processo de importaçã o.
The find_spec() method of meta path finders is called with two or three arguments. The first is the fully qualified
name of the module being imported, for example [Link]. The second argument is the path entries to use
for the module search. For top-level modules, the second argument is None, but for submodules or subpackages, the
second argument is the value of the parent package’s __path__ attribute. If the appropriate __path__ attribute
cannot be accessed, a ModuleNotFoundError is raised. The third argument is an existing module object that will
be the target of loading later. The import system passes in a target module only during reload.
O metacaminho pode ser percorrido mú ltiplas vezes para uma requisiçã o de importaçã o individual. Por exemplo,
presumindo que nenhum dos mó dulos envolvidos já tenha sido cacheado, importar [Link] irá primeiro exe-
cutar uma importaçã o de alto nível, chamando mpf.find_spec("foo", None, None) em cada localizador de
metacaminho (mpf). Depois que foo foi importado, [Link] será importado percorrendo o metacaminho uma
segunda vez, chamando mpf.find_spec("[Link]", foo.__path__, None). Uma vez que [Link] tenha
sido importado, a travessia final irá chamar mpf.find_spec("[Link]", [Link].__path__, None).
Alguns localizadores de metacaminho apenas dã o suporte a importaçõ es de alto nível. Estes importadores vã o sempre
retornar None quando qualquer coisa diferente de None for passada como o segundo argumento.
O sys.meta_path padrã o do Python possui trê s localizador de metacaminho, um que sabe como importar mó du-
los embutidos, um que sabe como importar mó dulos congelados, e outro que sabe como importar mó dulos de um
caminho de importação (isto é , o localizador baseado no caminho).
Alterado na versã o 3.4: O mé todo find_spec() dos localizador de metacaminho substituiu find_module(), o
qual agora foi descontinuado. Embora continue a funcionar sem alteraçõ es, a mecanismo de importaçã o só tentará
fazê -lo se o localizador nã o implementar find_spec().
Alterado na versã o 3.10: O uso de find_module() pelo sistema de importaçã o agora levanta ImportWarning.
Alterado na versã o 3.12: find_module() foi removido. Use find_spec().
5.4 Carregando
Se e quando uma especificaçã o do mó dulo for encontrada, o mecanismo de importaçã o irá usá -lo (e o carregador
que ele conté m) durante o carregamento do mó dulo. Aqui está uma aproximaçã o do que acontece durante a etapa
de carregamento de uma importaçã o:
module = None
if [Link] is not None and hasattr([Link], 'create_module'):
# It is assumed 'exec_module' will also be defined on the loader.
module = [Link].create_module(spec)
if module is None:
module = ModuleType([Link])
# The import-related module attributes get set here:
_init_module_attrs(spec, module)
if [Link] is None:
# unsupported
raise ImportError
if [Link] is None and spec.submodule_search_locations is not None:
# namespace package
[Link][[Link]] = module
elif not hasattr([Link], 'exec_module'):
module = [Link].load_module([Link])
else:
[Link][[Link]] = module
try:
[Link].exec_module(module)
except BaseException:
try:
del [Link][[Link]]
except KeyError:
pass
raise
return [Link][[Link]]
do mó dulo em [Link]. O efeito indireto disso é que um mó dulo importado pode substituir a si mesmo em [Link]. Esse é um
comportamento específico da implementaçã o que nã o tem garantia de funcionar em outras implementaçõ es do Python.
5.4. Carregando 71
The Python Language Reference, Release 3.13.0
5.4.1 Carregadores
Os carregadores de mó dulo fornecem a funçã o crítica de carregamento: execuçã o do mó dulo. O mecanismo de
importaçã o chama o mé todo [Link].exec_module() com um ú nico argumento, o objeto do
mó dulo a ser executado. Qualquer valor retornado de exec_module() é ignorado.
Os carregadores devem atender aos seguintes requisitos:
• Se o mó dulo for um mó dulo Python (em oposiçã o a um mó dulo embutido ou uma extensã o carregada dinami-
camente), o carregador deve executar o có digo do mó dulo no espaço de nomes global do mó dulo (module.
__dict__).
• Se o carregador nã o puder executar o mó dulo, ele deve levantar uma execçã o ImportError, embora qualquer
outra exceçã o levantada durante exec_module() será propagada.
Em muitos casos, o localizador e o carregador podem ser o mesmo objeto; nesses casos o mé todo find_spec()
apenas retornaria uma especificaçã o com o carregador definido como self.
Os carregadores de mó dulo podem optar por criar o objeto do mó dulo durante o carregamento, implementando um
mé todo create_module(). Leva um argumento, a especificaçã o do mó dulo e retorna o novo objeto do mó dulo
para usar durante o carregamento. create_module() nã o precisa definir nenhum atributo no objeto do mó dulo.
Se o mé todo retornar None, o mecanismo de importaçã o criará ele mesmo o novo mó dulo.
Adicionado na versã o 3.4: O mé todo create_module() de carregadores.
Alterado na versã o 3.4: O mé todo load_module() foi substituído por exec_module() e o mecanismo de impor-
taçã o assumiu todas as responsabilidades inerentes de carregamento.
Para compatibilidade com carregadores existentes, o mecanismo de importaçã o usará o mé todo load_module() de
carregadores se ele existir e o carregador també m nã o implementar exec_module(). No entanto, load_module()
foi descontinuado e os carregadores devem implementar exec_module() em seu lugar.
O mé todo load_module() deve implementar toda a funcionalidade inerente de carregamento descrita acima, alé m
de executar o mó dulo. Todas as mesmas restriçõ es se aplicam, com alguns esclarecimentos adicionais:
• Se houver um objeto de mó dulo existente com o nome fornecido em [Link], o carregador deverá usar
esse mó dulo existente. (Caso contrá rio, [Link]() nã o funcionará corretamente.) Se o mó dulo
nomeado nã o existir em [Link], o carregador deverá criar um novo objeto de mó dulo e adicioná -lo a
[Link].
• O mó dulo deve existir em [Link] antes que o carregador execute o có digo do mó dulo, para evitar
recursã o ilimitada ou carregamento mú ltiplo.
• Se o carregamento falhar, o carregador deverá remover quaisquer mó dulos inseridos em [Link], mas
deverá remover apenas o(s) mó dulo(s) com falha, e somente se o pró prio carregador tiver carregado o(s)
mó dulo(s) explicitamente.
Alterado na versã o 3.5: Uma exceçã o DeprecationWarning é levantada quando exec_module() está definido,
mas create_module() nã o.
Alterado na versã o 3.6: Uma exceçã o ImportError é levantada quando exec_module() está definido, mas
create_module() nã o.
Alterado na versã o 3.10: O uso de load_module() vai levantar ImportWarning.
5.4.2 Submódulos
Quando um submó dulo é carregado usando qualquer mecanismo (por exemplo, APIs importlib, as instruçõ es
import ou import-from, ou __import__() embutidas) uma ligaçã o é colocada no espaço de nomes do mó dulo
pai para o objeto submó dulo. Por exemplo, se o pacote spam tiver um submó dulo foo, apó s importar [Link],
spam terá um atributo foo que está vinculado ao submó dulo. Digamos que você tenha a seguinte estrutura de
diretó rios:
spam/
__init__.py
[Link]
entã o executar o seguinte coloca ligaçõ es de nome para foo e Foo no mó dulo spam:
Dadas as conhecidas regras de ligaçã o de nomes do Python, isso pode parecer surpreendente, mas na verdade é um re-
curso fundamental do sistema de importaçã o. A propriedade invariante é que se você tiver [Link]['spam']
e [Link]['[Link]'] (como faria apó s a importaçã o acima), o ú ltimo deve aparecer como o atributo foo
do primeiro.
The same rules used for [Link] also apply to a package’s __path__. sys.path_hooks (described below) are
consulted when traversing a package’s __path__.
A package’s __init__.py file may set or alter the package’s __path__ attribute, and this was typically the way
namespace packages were implemented prior to PEP 420. With the adoption of PEP 420, namespace packages
no longer need to supply __init__.py files containing only __path__ manipulation code; the import machinery
automatically sets __path__ correctly for the namespace package.
5.4. Carregando 73
The Python Language Reference, Release 3.13.0
importaçã o, mas é importante ter em mente que eles sã o sutilmente diferentes. Em particular, os localizadores de
metacaminho operam no início do processo de importaçã o, conforme a travessia de sys.meta_path.
Por outro lado, os localizadores de entrada de caminho sã o, em certo sentido, um detalhe de implementaçã o do
localizador baseado no caminho e, de fato, se o localizador baseado no caminho fosse removido de sys.meta_path,
nenhuma semâ ntica do localizador de entrada de caminho seria ser invocado.
O diretó rio de trabalho atual – denotado por uma string vazia – é tratado de forma ligeiramente diferente de outras
entradas em [Link]. Primeiro, se o diretó rio de trabalho atual for considerado inexistente, nenhum valor será
armazenado em sys.path_importer_cache. Segundo, o valor para o diretó rio de trabalho atual é pesquisado
novamente para cada pesquisa de mó dulo. Terceiro, o caminho usado para sys.path_importer_cache e re-
tornado por [Link].find_spec() será o diretó rio de trabalho atual real e nã o a
string vazia.
Se for aceitá vel alterar apenas o comportamento de instruçõ es de importaçã o sem afetar outras APIs que acessam o
sistema de importaçã o, entã o substituir a funçã o embutida __import__() pode ser suficiente. Essa té cnica també m
pode ser empregada no nível do mó dulo para alterar apenas o comportamento de instruçõ es de importaçã o dentro
desse mó dulo.
Para impedir seletivamente a importaçã o de alguns mó dulos de um gancho no início do metacaminho (em vez de
desabilitar o sistema de importaçã o padrã o completamente), é suficiente levantar ModuleNotFoundError direta-
mente de find_spec() em vez de retornar None. O ú ltimo indica que a busca do metacaminho deve continuar,
enquanto levantar uma exceçã o a encerra imediatamente.
package/
__init__.py
subpackage1/
__init__.py
[Link]
[Link]
subpackage2/
__init__.py
[Link]
[Link]
Importaçõ es absolutas podem usar a sintaxe import <> ou from <> import <>, mas importaçõ es relativas po-
dem usar apenas a segunda forma; o motivo para isso é que:
import [Link]
deve expor [Link] como uma expressã o utilizá vel, mas .moduleY nã o é uma expressã o vá lida.
5.8.1 __main__.__spec__
Dependendo de como __main__ é inicializado, __main__.__spec__ é definido apropriadamente ou como None.
Quando o Python é iniciado com a opçã o -m, __spec__ é definido como a especificaçã o do mó dulo ou pacote
correspondente. __spec__ també m é preenchido quando o mó dulo __main__ é carregado como parte da execuçã o
de um diretó rio, arquivo zip ou outra entrada [Link].
Nos demais casos, __main__.__spec__ é definido como None, pois o có digo usado para preencher o __main__
nã o corresponde diretamente a um mó dulo importá vel:
• prompt interativo
• opçã o -c
• executar a partir de stdin
• executar diretamente de um arquivo de có digo-fonte ou bytecode
Note que __main__.__spec__ é sempre None no ú ltimo caso, mesmo se o arquivo pudesse ser importado direta-
mente como um mó dulo. Use a opçã o -m se metadados de mó dulo vá lidos forem desejados em __main__.
Note també m que mesmo quando __main__ corresponde a um mó dulo importá vel e __main__.__spec__ é defi-
nido adequadamente, eles ainda sã o considerados mó dulos distintos. Isso se deve ao fato de que os blocos protegidos
por verificaçõ es if __name__ == "__main__": sã o executados somente quando o mó dulo é usado para preen-
cher o espaço de nomes __main__, e nã o durante a importaçã o normal.
5.9 Referências
O maquiná rio de importaçã o evoluiu consideravelmente desde os primeiros dias do Python. A especificaçã o ori-
ginal para pacotes ainda está disponível para leitura, embora alguns detalhes tenham mudado desde a escrita desse
documento.
A especificaçã o original para sys.meta_path era PEP 302, com extensã o subsequente em PEP 420.
PEP 420 introduziu pacotes de espaço de nomes para Python 3.3. PEP 420 també m introduziu o protocolo
find_loader() como uma alternativa ao find_module().
PEP 366 descreve a adiçã o do atributo __package__ para importaçõ es relativas explícitas em mó dulos principais.
PEP 328 introduziu importaçõ es relativas absolutas e explícitas e inicialmente propô s __name__ para semâ ntica.
PEP 366 eventualmente especificaria __package__.
PEP 338 define mó dulos de execuçã o como scripts.
PEP 451 adiciona o encapsulamento do estado de importaçã o por mó dulo em objetos de especificaçã o. Ele també m
descarrega a maioria das responsabilidades inerentes dos carregadores de volta para o maquiná rio de importaçã o.
Essas mudanças permitem a descontinuaçã o de vá rias APIs no sistema de importaçã o e també m a adiçã o de novos
mé todos para localizadores e carregadores.
Expressões
e nenhuma semâ ntica é fornecida, a semâ ntica desta forma de name é a mesma que para othername.
6.2 Átomos
Os á tomos sã o os elementos mais bá sicos das expressõ es. Os á tomos mais simples sã o identificadores ou literais. As
formas entre parê nteses, colchetes ou chaves també m sã o categorizadas sintaticamente como á tomos. A sintaxe para
á tomos é :
79
The Python Language Reference, Release 3.13.0
µ Ver também
As especificações de classe.
Mais precisamente, os nomes privados sã o transformados em um formato mais longo antes que o có digo seja ge-
rado para eles. Se o nome transformado tiver mais de 255 caracteres, poderá ocorrer truncamento definido pela
implementaçã o.
A transformaçã o é independente do contexto sintá tico no qual o identificador é usado, mas apenas os seguintes
identificadores privados sã o desfigurados:
• Qualquer nome usado como nome de uma variá vel que é atribuída ou lida ou qualquer nome de um atributo
que está sendo acessado.
O atributo __name__ de funçõ es aninhadas, classes e apelidos de tipo, entretanto, nã o é desfigurado.
• O nome dos mó dulos importados, por exemplo, __spam em import __spam. Se o mó dulo faz parte de um
pacote (ou seja, seu nome conté m um ponto), o nome não é desfigurado, por exemplo, o __foo em import
__foo.bar nã o é desfigurado.
• O nome de um membro importado, por exemplo, __f em from spam import __f.
A regra de transformaçã o está definida da seguinte forma:
• O nome da classe, com os sublinhados iniciais removidos e um ú nico sublinhado inicial inserido, é inserido na
frente do identificador, por exemplo, o identificador __spam ocorrendo em uma classe chamada Foo, _Foo
ou __Foo é transformado em _Foo__spam.
• Se o nome da classe consiste apenas em sublinhados, a transformaçã o é a identidade, por exemplo, o identifi-
cador __spam que ocorre em uma classe chamada _ ou __ é deixado como está .
6.2.2 Literais
Python oferece suporte a strings e bytes literais e vá rios literais numé ricos:
A avaliaçã o de um literal produz um objeto do tipo fornecido (string, bytes, inteiro, nú mero de ponto flutuante, nú mero
complexo) com o valor fornecido. O valor pode ser aproximado no caso de ponto flutuante e literais imaginá rios
(complexos). Veja a seçã o Literais para detalhes.
Todos os literais correspondem a tipos de dados imutá veis e, portanto, a identidade do objeto é menos importante
que seu valor. Mú ltiplas avaliaçõ es de literais com o mesmo valor (seja a mesma ocorrê ncia no texto do programa
ou uma ocorrê ncia diferente) podem obter o mesmo objeto ou um objeto diferente com o mesmo valor.
80 Capítulo 6. Expressões
The Python Language Reference, Release 3.13.0
Uma lista de expressõ es entre parê nteses produz tudo o que aquela lista de expressõ es produz: se a lista contiver
pelo menos uma vírgula, ela produzirá uma tupla; caso contrá rio, produz a ú nica expressã o que compõ e a lista de
expressõ es.
Um par de parê nteses vazio produz um objeto tupla vazio. Como as tuplas sã o imutá veis, aplicam-se as mesmas
regras dos literais (isto é , duas ocorrê ncias da tupla vazia podem ou nã o produzir o mesmo objeto).
Observe que as tuplas nã o sã o formadas pelos parê nteses, mas sim pelo uso da vírgula. A exceçã o é a tupla vazia,
para a qual os parê nteses são obrigató rios – permitir “nada” sem parê nteses em expressõ es causaria ambiguidades e
permitiria que erros de digitaçã o comuns passassem sem serem detectados.
A compreensã o consiste em uma ú nica expressã o seguida por pelo menos uma clá usula for e zero ou mais clá usulas
for ou if. Neste caso, os elementos do novo contê iner sã o aqueles que seriam produzidos considerando cada uma
das clá usulas for ou if de um bloco, aninhando da esquerda para a direita, e avaliando a expressã o para produzir
um elemento cada vez que o bloco mais interno é alcançado.
No entanto, alé m da expressã o iterá vel na clá usula for mais à esquerda, a compreensã o é executada em um escopo
aninhado implicitamente separado. Isso garante que os nomes atribuídos na lista de destino nã o “vazem” para o
escopo delimitador.
A expressã o iterá vel na clá usula for mais à esquerda é avaliada diretamente no escopo envolvente e entã o passada
como um argumento para o escopo aninhado implicitamente. Clá usulas for subsequentes e qualquer condiçã o de
filtro na clá usula for mais à esquerda nã o podem ser avaliadas no escopo delimitador, pois podem depender dos
valores obtidos do iterá vel mais à esquerda. Por exemplo: [x*y for x in range(10) for y in range(x,
x+10)].
Para garantir que a compreensã o sempre resulte em um contê iner do tipo apropriado, as expressõ es yield e yield
from sã o proibidas no escopo aninhado implicitamente.
Desde o Python 3.6, em uma funçã o async def , uma clá usula async for pode ser usada para iterar sobre um
iterador assíncrono. Uma compreensã o em uma funçã o async def pode consistir em uma clá usula for ou async
for seguindo a expressã o inicial, pode conter for adicional ou async for e també m pode usar expressõ es await.
Se uma compreensã o conté m clá usulas async for, ou se conté m expressõ es await ou outras compreensõ es assín-
cronas em qualquer lugar, exceto a expressã o iterá vel na clá usula for mais à esquerda, ela é chamada uma compre-
ensão assíncrona. Uma compreensã o assíncrona pode suspender a execuçã o da funçã o de corrotina em que aparece.
Veja també m a PEP 530.
Adicionado na versã o 3.6: Compreensõ es assíncronas foram introduzidas.
Alterado na versã o 3.8: yield e yield from proibidos no escopo aninhado implícito.
6.2. Átomos 81
The Python Language Reference, Release 3.13.0
Alterado na versã o 3.11: Compreensõ es assíncronas agora sã o permitidas dentro de compreensõ es em funçõ es as-
síncronas. As compreensõ es externas tornam-se implicitamente assíncronas.
Uma sintaxe de criaçã o de lista produz um novo objeto de lista, sendo o conteú do especificado por uma lista de
expressõ es ou uma compreensã o. Quando uma lista de expressõ es separadas por vírgulas é fornecida, seus elementos
sã o avaliados da esquerda para a direita e colocados no objeto de lista nessa ordem. Quando uma compreensã o é
fornecida, a lista é construída a partir dos elementos resultantes da compreensã o.
Uma sintaxe de criaçã o de conjunto produz um novo objeto de conjunto mutá vel, sendo o conteú do especificado
por uma sequê ncia de expressõ es ou uma compreensã o. Quando uma lista de expressõ es separadas por vírgula é
fornecida, seus elementos sã o avaliados da esquerda para a direita e adicionados ao objeto definido. Quando uma
compreensã o é fornecida, o conjunto é construído a partir dos elementos resultantes da compreensã o.
Um conjunto vazio nã o pode ser construído com {}; este literal constró i um dicioná rio vazio.
Uma sintaxe de criaçã o de dicioná rio produz um novo objeto dicioná rio.
Se for fornecida uma sequê ncia separada por vírgulas de itens de dicioná rio, eles sã o avaliados da esquerda para
a direita para definir as entradas do dicioná rio: cada objeto chave é usado como uma chave no dicioná rio para
armazenar o valor correspondente. Isso significa que você pode especificar a mesma chave vá rias vezes na lista de
itens de dicioná rio, e o valor final do dicioná rio para essa chave será o ú ltimo dado.
Um asterisco duplo ** denota desempacotamento do dicionário. Seu operando deve ser um mapeamento. Cada item
de mapeamento é adicionado ao novo dicioná rio. Os valores posteriores substituem os valores já definidos por itens
de dicioná rio anteriores e desempacotamentos de dicioná rio anteriores.
Adicionado na versã o 3.5: Desempacotando em sintaxes de criaçã o de dicioná rio, originalmente proposto pela PEP
448.
Uma compreensã o de dict, em contraste com as compreensõ es de lista e conjunto, precisa de duas expressõ es sepa-
radas por dois pontos, seguidas pelas clá usulas usuais “for” e “if”. Quando a compreensã o é executada, os elementos
chave e valor resultantes sã o inseridos no novo dicioná rio na ordem em que sã o produzidos.
Restriçõ es nos tipos de valores de chave sã o listadas anteriormente na seçã o A hierarquia de tipos padrão. (Para
resumir, o tipo de chave deve ser hasheável, que exclui todos os objetos mutá veis.) Nã o sã o detectadas colisõ es
82 Capítulo 6. Expressões
The Python Language Reference, Release 3.13.0
entre chaves duplicadas; o ú ltimo valor (textualmente mais à direita na sintaxe de criaçã o) armazenado para um
determinado valor de chave prevalece.
Alterado na versã o 3.8: Antes do Python 3.8, em compreensõ es de dict, a ordem de avaliaçã o de chave e valor nã o
era bem definida. No CPython, o valor foi avaliado antes da chave. A partir de 3.8, a chave é avaliada antes do valor,
conforme proposto pela PEP 572.
Uma expressã o geradora produz um novo objeto gerador. Sua sintaxe é a mesma das compreensõ es, exceto pelo fato
de estar entre parê nteses em vez de colchetes ou chaves.
As variá veis usadas na expressã o geradora sã o avaliadas lentamente quando o mé todo __next__() é chamado
para o objeto gerador (da mesma forma que os geradores normais). No entanto, a expressã o iterá vel na clá usula
for mais à esquerda é avaliada imediatamente, de modo que um erro produzido por ela será emitido no ponto em
que a expressã o do gerador é definida, em vez de no ponto em que o primeiro valor é recuperado. Clá usulas for
subsequentes e qualquer condiçã o de filtro na clá usula for mais à esquerda nã o podem ser avaliadas no escopo
delimitador, pois podem depender dos valores obtidos do iterá vel mais à esquerda. Por exemplo: (x*y for x in
range(10) for y in range(x, x+10)).
Os parê nteses podem ser omitidos em chamadas com apenas um argumento. Veja a seçã o Chamadas para detalhes.
Para evitar interferir com a operaçã o esperada da pró pria expressã o geradora, as expressõ es yield e yield from
sã o proibidas no gerador definido implicitamente.
Se uma expressã o geradora conté m clá usulas async for ou expressõ es await, ela é chamada de expressão gera-
dora assíncrona. Uma expressã o geradora assíncrona retorna um novo objeto gerador assíncrono, que é um iterador
assíncrono (consulte Iteradores assíncronos).
Adicionado na versã o 3.6: Expressõ es geradoras assíncronas foram introduzidas.
Alterado na versã o 3.7: Antes do Python 3.7, as expressõ es geradoras assíncronas só podiam aparecer em corrotinas
async def . A partir da versã o 3.7, qualquer funçã o pode usar expressõ es geradoras assíncronas.
Alterado na versã o 3.8: yield e yield from proibidos no escopo aninhado implícito.
Devido a seus efeitos colaterais no escopo recipiente, as expressõ es yield nã o sã o permitidas como parte dos escopos
definidos implicitamente usados para implementar compreensõ es e expressõ es geradoras.
Alterado na versã o 3.8: Expressõ es yield proibidas nos escopos aninhados implicitamente usados para implementar
compreensõ es e expressõ es geradoras.
6.2. Átomos 83
The Python Language Reference, Release 3.13.0
As funçõ es geradoras sã o descritas abaixo, enquanto as funçõ es geradoras assíncronas sã o descritas separadamente
na seçã o Funções geradoras assíncronas
Quando uma funçã o geradora é chamada, ela retorna um iterador conhecido como gerador. Esse gerador entã o
controla a execuçã o da funçã o geradora. A execuçã o começa quando um dos mé todos do gerador é chamado. Nesse
momento, a execuçã o segue para a primeira expressã o yield, onde é suspensa novamente, retornando o valor de
yield_list ao chamador do gerador, ou None se yield_list é omitido. Por suspenso, queremos dizer que todo
o estado local é retido, incluindo as chamadas atuais de variá veis locais, o ponteiro de instruçã o, a pilha de avaliaçã o
interna e o estado de qualquer tratamento de exceçã o. Quando a execuçã o é retomada chamando um dos mé todos
do gerador, a funçã o pode prosseguir exatamente como se a expressã o yield fosse apenas outra chamada externa. O
valor da expressã o yield apó s a retomada depende do mé todo que retomou a execuçã o. Se __next__() for usado
(tipicamente atravé s de uma for ou do next() embutido) entã o o resultado será None. Caso contrá rio, se send()
for usado, o resultado será o valor passado para esse mé todo.
Tudo isso torna as funçõ es geradoras bastante semelhantes à s corrotinas; cedem mú ltiplas vezes, possuem mais de
um ponto de entrada e sua execuçã o pode ser suspensa. A ú nica diferença é que uma funçã o geradora nã o pode
controlar onde a execuçã o deve continuar apó s o seu rendimento; o controle é sempre transferido para o chamador
do gerador.
Expressõ es yield sã o permitidas em qualquer lugar em uma construçã o try . Se o gerador nã o for retomado antes
de ser finalizado (ao atingir uma contagem de referê ncias zero ou ao ser coletado como lixo), o mé todo close() do
iterador de gerador será chamado, permitindo que quaisquer clá usulas finally pendentes sejam executadas.
Quando yield from <expr> é usado, a expressã o fornecida deve ser iterá vel. Os valores produzidos pela iteraçã o
desse iterá vel sã o passados diretamente para o chamador dos mé todos do gerador atual. Quaisquer valores passados
com send() e quaisquer exceçõ es passadas com throw() sã o passados para o iterador subjacente se ele tiver os
mé todos apropriados. Se este nã o for o caso, entã o send() irá levantar AttributeError ou TypeError, enquanto
throw() irá apenas levantar a exceçã o passada imediatamente.
Quando o iterador subjacente estiver completo, o atributo value da instâ ncia StopIteration gerada torna-se o
valor da expressã o yield. Ele pode ser definido explicitamente ao levantar StopIteration ou automaticamente
quando o subiterador é um gerador (retornando um valor do subgerador).
Alterado na versã o 3.3: Adicionado yield from <expr> para delegar o fluxo de controle a um subiterador.
Os parê nteses podem ser omitidos quando a expressã o yield é a ú nica expressã o no lado direito de uma instruçã o de
atribuiçã o.
µ Ver também
84 Capítulo 6. Expressões
The Python Language Reference, Release 3.13.0
funçã o geradora é retomada com um mé todo __next__(), a expressã o yield atual sempre é avaliada como
None. A execuçã o entã o continua para a pró xima expressã o yield, onde o gerador é suspenso novamente, e o
valor de yield_list é retornado para o chamador de __next__(). Se o gerador sair sem produzir outro
valor, uma exceçã o StopIteration será levantada.
Este mé todo é normalmente chamado implicitamente, por exemplo por um laço for, ou pela funçã o embutida
next().
[Link](value)
Retoma a execuçã o e “envia” um valor para a funçã o geradora. O argumento value torna-se o resultado
da expressã o yield atual. O mé todo send() retorna o pró ximo valor gerado pelo gerador, ou levanta
StopIteration se o gerador sair sem produzir outro valor. Quando send() é chamado para iniciar o
gerador, ele deve ser chamado com None como argumento, porque nã o há nenhuma expressã o yield que possa
receber o valor.
[Link](value)
[ [
[Link](type , value , traceback ]])
Levanta uma exceçã o no ponto em que o gerador foi pausado e retorna o pró ximo valor gerado pela funçã o
geradora. Se o gerador sair sem gerar outro valor, uma exceçã o StopIteration será levantada. Se a funçã o
geradora nã o detectar a exceçã o passada ou levanta uma exceçã o diferente, essa exceçã o se propagará para o
chamador.
Em uso típico, isso é chamado com uma ú nica instâ ncia de exceçã o semelhante à forma como a palavra reser-
vada raise é usada.
Para compatibilidade com versõ es anteriores, no entanto, a segunda assinatura é suportada, seguindo uma
convençã o de versõ es mais antigas do Python. O argumento type deve ser uma classe de exceçã o e value
deve ser uma instâ ncia de exceçã o. Se o valor nã o for fornecido, o construtor tipo será chamado para obter
uma instâ ncia. Se traceback for fornecido, ele será definido na exceçã o, caso contrá rio, qualquer atributo
__traceback__ existente armazenado em value poderá ser limpo.
Alterado na versã o 3.12: A segunda assinatura (tipo[, valor[, traceback]]) foi descontinuada e pode ser remo-
vida em uma versã o futura do Python.
[Link]()
Levanta GeneratorExit no ponto onde a funçã o geradora foi pausada. Se a funçã o geradora captura a
exceçã o, e retorna um valor, este valor é retornado de close(). Se a funçã o geradora já estiver fechada ou
levantar GeneratorExit (por nã o capturar a exceçã o), close() retornará None. Se o gerador produzir
um valor, uma exceçã o RuntimeError é levantada. Se o gerador levantar qualquer outra exceçã o, ela será
propagada para o chamador. Se o gerador já saiu devido a uma exceçã o ou saída normal, close() retorna
None e tem nenhum outro efeito.
Alterado na versã o 3.13: Se um gerador retornar um valor ao ser fechado, o valor será retornado por close().
Exemplos
Aqui está um exemplo simples que demonstra o comportamento de geradores e funçõ es geradoras:
...
>>> generator = echo(1)
(continua na pró xima pá gina)
6.2. Átomos 85
The Python Language Reference, Release 3.13.0
Para exemplos usando yield from, consulte a pep-380 em “O que há de novo no Python.”
86 Capítulo 6. Expressões
The Python Language Reference, Release 3.13.0
6.3 Primárias
Primá rias representam as operaçõ es mais fortemente vinculadas da linguagem. Sua sintaxe é :
6.3. Primárias 87
The Python Language Reference, Release 3.13.0
A primá ria deve avaliar para um objeto de um tipo que tem suporte a referê ncias de atributo, o que a maioria dos
objetos faz. Este objeto é entã o solicitado a produzir o atributo cujo nome é o identificador. O tipo e o valor produzido
sã o determinados pelo objeto. Vá rias avaliaçõ es da mesma referê ncia de atributo podem produzir diferentes objetos.
Esta produçã o pode ser personalizada substituindo o mé todo __getattribute__() ou o mé todo
__getattr__(). O mé todo __getattribute__() é chamado primeiro e retorna um valor ou levanta
uma AttributeError se o atributo nã o estiver disponível.
Se for levantada uma AttributeError e o objeto tiver um mé todo __getattr__(), esse mé todo será chamado
como alternativa.
6.3.2 Subscrições
A subscriçã o de uma instâ ncia de uma classe de classe de contêiner geralmente selecionará um elemento do contê iner.
A subscriçã o de uma classe genérica geralmente retornará um objeto GenericAlias.
Quando um objeto é subscrito, o interpretador avaliará o primá rio e a lista de expressõ es.
O primá rio deve ser avaliado como um objeto que dê suporte à subscriçã o. Um objeto pode prover suporte a subs-
criçã o atravé s da definiçã o de um ou ambos __getitem__() e __class_getitem__(). Quando o primá rio é
subscrito, o resultado avaliado da lista de expressõ es será passado para um desses mé todos. Para mais detalhes sobre
quando __class_getitem__ é chamado em vez de __getitem__, veja __class_getitem__ versus __getitem__.
Se a lista de expressõ es contiver pelo menos uma vírgula ou se alguma das expressõ es for estrelada, ela será avaliada
como uma tuple contendo os itens da lista de expressõ es. Caso contrá rio, a lista de expressõ es será avaliada como
o valor do ú nico membro da lista.
Alterado na versã o 3.11: Expressõ es em uma lista de expressõ es podem ser estreladas. Veja a PEP 646.
Para objetos embutido, existem dois tipos de objetos que oferecem suporte a subscriçã o via __getitem__():
1. Mapeamentos. Se o primá rio for um mapeamento, a lista de expressõ es deve ser avaliada como um objeto cujo
valor é uma das chaves do mapeamento, e a subscriçã o seleciona o valor no mapeamento que corresponde a
essa chave. Um exemplo de classe de mapeamento integrada é a classe dict.
2. Sequê ncias. Se o primá rio for uma sequência, a lista de expressõ es deve ser avaliada como int ou slice
(conforme discutido na seçã o seguinte). Exemplos de classes de sequê ncia embutidas incluem as classes str,
list e tuple.
A sintaxe formal nã o faz nenhuma provisã o especial para índices negativos em sequências. No entanto, todas as
sequê ncias embutidas fornecem um mé todo __getitem__() que interpreta índices negativos adicionando o com-
primento da sequê ncia ao índice para que, por exemplo, x[-1] selecione o ú ltimo item de x. O valor resultante
deve ser um nú mero inteiro nã o negativo menor que o nú mero de itens na sequê ncia, e a subscriçã o seleciona o item
cujo índice é esse valor (contando a partir de zero). Como o suporte para índices negativos e fatiamento ocorre no
mé todo __getitem__() do objeto, as subclasses que substituem esse mé todo precisarã o adicionar explicitamente
esse suporte.
Uma string é um tipo especial de sequê ncia cujos itens sã o caracteres. Um caractere nã o é um tipo de dados
separado, mas uma string de exatamente um caractere.
88 Capítulo 6. Expressões
The Python Language Reference, Release 3.13.0
6.3.3 Fatiamentos
Um fatiamento seleciona um intervalo de itens em um objeto sequê ncia (por exemplo, uma string, tupla ou lista).
As fatias podem ser usadas como expressõ es ou como alvos em instruçõ es de atribuiçã o ou del. A sintaxe para um
fatiamento:
Há ambiguidade na sintaxe formal aqui: qualquer coisa que se pareça com uma lista de expressõ es també m se parece
com uma lista de fatias, portanto qualquer subscriçã o pode ser interpretada como um fatiamento. Em vez de com-
plicar ainda mais a sintaxe, isso é eliminado pela definiçã o de que, neste caso, a interpretaçã o como uma subscriçã o
tem prioridade sobre a interpretaçã o como um fatiamento (este é o caso se a lista de fatias nã o contiver uma fatia
adequada).
A semâ ntica para um fatiamento é a seguinte. O primá rio é indexado (usando o mesmo mé todo __getitem__()
da subscriçã o normal) com uma chave que é construída a partir da lista de fatias, como segue. Se a lista de fatias
contiver pelo menos uma vírgula, a chave será uma tupla contendo a conversã o dos itens da fatia; caso contrá rio, a
conversã o do item de fatia isolada é a chave. A conversã o de um item de fatia que é uma expressã o é essa expressã o.
A conversã o de uma fatia adequada é um objeto fatia (veja a seçã o A hierarquia de tipos padrão) cujos start, stop e
step atributos sã o os valores das expressõ es fornecidas como limite inferior, limite superior e passo, respectivamente,
substituindo None pelas expressõ es ausentes.
6.3.4 Chamadas
Uma chamada chama um objeto que é um chamá vel (por exemplo, uma função) com uma sé rie possivelmente vazia
de argumentos:
Uma vírgula final opcional pode estar presente apó s os argumentos posicionais e nomeados, mas nã o afeta a semâ ntica.
O primá rio deve ser avaliado como um objeto que pode ser chamado (funçõ es definidas pelo usuá rio, funçõ es em-
butidas, mé todos de objetos embutidos, objetos de classe, mé todos de instâ ncias de classe e todos os objetos que
possuem um mé todo __call__() sã o chamá veis). Todas as expressõ es de argumento sã o avaliadas antes da tenta-
tiva de chamada. Consulte a seçã o Definições de função para a sintaxe das listas formais de parâmetros.
Se houver argumentos nomeados, eles serã o primeiro convertidos em argumentos posicionais, como segue. Pri-
meiro, é criada uma lista de slots nã o preenchidos para os parâ metros formais. Se houver N argumentos posicionais,
eles serã o colocados nos primeiros N slots. A seguir, para cada argumento nomeado, o identificador é usado para
determinar o slot correspondente (se o identificador for igual ao primeiro nome formal do parâ metro, o primeiro
slot será usado e assim por diante). Se o slot já estiver preenchido, uma exceçã o TypeError será levantada. Caso
6.3. Primárias 89
The Python Language Reference, Release 3.13.0
contrá rio, o argumento é colocado no slot, preenchendo-o (mesmo que a expressã o seja None, ela preenche o slot).
Quando todos os argumentos forem processados, os slots ainda nã o preenchidos serã o preenchidos com o valor pa-
drã o correspondente da definiçã o da funçã o. (Os valores padrã o sã o calculados, uma vez, quando a funçã o é definida;
assim, um objeto mutá vel, como uma lista ou dicioná rio usado como valor padrã o, será compartilhado por todas as
chamadas que nã o especificam um valor de argumento para o slot correspondente; isso deve geralmente ser evitado.)
Se houver algum slot nã o preenchido para o qual nenhum valor padrã o for especificado, uma exceçã o TypeError
será levantada. Caso contrá rio, a lista de slots preenchidos será usada como lista de argumentos para a chamada.
Detalhes da implementação do CPython: Uma implementaçã o pode fornecer funçõ es integradas cujos parâ me-
tros posicionais nã o possuem nomes, mesmo que sejam ‘nomeados’ para fins de documentaçã o e que, portanto,
nã o possam ser fornecidos por nomes. No CPython, este é o caso de funçõ es implementadas em C que usam
PyArg_ParseTuple() para analisar seus argumentos.
Se houver mais argumentos posicionais do que slots de parâ metros formais, uma exceçã o TypeError será levantada,
a menos que um parâ metro formal usando a sintaxe *identificador esteja presente; neste caso, esse parâ metro
formal recebe uma tupla contendo os argumentos posicionais em excesso (ou uma tupla vazia se nã o houver argu-
mentos posicionais em excesso).
Se algum argumento nomeado nã o corresponder a um nome de parâ metro formal, uma exceçã o TypeError é le-
vantada, a menos que um parâ metro formal usando a sintaxe **identificador esteja presente; neste caso, esse
parâ metro formal recebe um dicioná rio contendo os argumentos nomeados em excesso (usando os nomes como
chaves e os valores dos argumentos como valores correspondentes), ou um (novo) dicioná rio vazio se nã o houver
argumentos nomeados em excesso.
Se a sintaxe *expressão aparecer na chamada da funçã o, expressão deverá ser avaliada como iterável. Os ele-
mentos desses iterá veis sã o tratados como se fossem argumentos posicionais adicionais. Para a chamada f(x1,
x2, *y, x3, x4), se y for avaliado como uma sequê ncia y1, …, yM, isso é equivalente a uma chamada com M+4
argumentos posicionais x1, x2, y1, …, yM, x3, x4.
Uma consequê ncia disso é que embora a sintaxe *expressão possa aparecer depois de argumentos nomeados explí-
citos, ela é processada antes dos argumentos nomeados (e de quaisquer argumentos de **expressão – veja abaixo).
Entã o:
É incomum que ambos os argumentos nomeados e a sintaxe *expressão sejam usados na mesma chamada, portanto,
na prá tica, essa confusã o nã o surge com frequê ncia.
Se a sintaxe **expressão aparecer na chamada de funçã o, expressão deve ser avaliada como um mapeamento,
cujo conteú do é tratado como argumentos nomeados adicionais. Se um parâ metro que corresponde a uma chave já
recebeu um valor (por um argumento nomeado explícito ou de outro desempacotamento), uma exceçã o TypeError
é levantada.
Quando **expressão é usada, cada chave neste mapeamento deve ser uma string. Cada valor do mapeamento é
atribuído ao primeiro parâ metro formal elegível para atribuiçã o de nomeas cujo nome é igual à chave. Uma chave
nã o precisa ser um identificador Python (por exemplo, "max-temp °F" é aceitá vel, embora nã o corresponda a
nenhum parâ metro formal que possa ser declarado). Se nã o houver correspondê ncia com um parâ metro formal, o
par chave-valor é coletado pelo parâ metro **, se houver, ou se nã o houver, uma exceçã o TypeError é levantada.
Parâ metros formais usando a sintaxe *identificador ou **identificador nã o podem ser usados como slots
de argumentos posicionais ou como nomes de argumentos nomeados.
90 Capítulo 6. Expressões
The Python Language Reference, Release 3.13.0
Alterado na versã o 3.5: Chamadas de funçã o aceitam qualquer nú mero de desempacotamentos * e **, argumentos
posicionais podem seguir desempacotamentos iterá veis (*) e argumentos nomeados podem seguir desempacotamen-
tos de dicioná rio (**). Originalmente proposto pela PEP 448.
Uma chamada sempre retorna algum valor, possivelmente None, a menos que levanta uma exceçã o. A forma como
esse valor é calculado depende do tipo do objeto chamá vel.
Se for…
uma função definida por usuário:
O bloco de có digo da funçã o é executado, passando-lhe a lista de argumentos. A primeira coisa que o bloco
de có digo fará é vincular os parâ metros formais aos argumentos; isso é descrito na seçã o Definições de função.
Quando o bloco de có digo executa uma instruçã o return, isso especifica o valor de retorno da chamada de
funçã o.
um método embutido ou uma função embutida:
O resultado fica por conta do interpretador; veja built-in-funcs para descriçõ es de funçõ es embutidas e mé todos
embutidos.
um objeto classe:
Uma nova instâ ncia dessa classe é retornada.
um método de instância de classe:
A funçã o correspondente definida pelo usuá rio é chamada, com uma lista de argumentos que é maior que a
lista de argumentos da chamada: a instâ ncia se torna o primeiro argumento.
uma instância de classe:
A classe deve definir um mé todo __call__(); o efeito é entã o o mesmo como se esse mé todo fosse chamado.
Assim, em uma sequê ncia sem parê nteses de operadores de potê ncia e uná rios, os operadores sã o avaliados da direita
para a esquerda (isso nã o restringe a ordem de avaliaçã o dos operandos): -1**2 resulta em -1 .
O operador de potê ncia tem a mesma semâ ntica que a funçã o embutida pow(), quando chamado com dois argu-
mentos: ele produz seu argumento esquerdo elevado à potê ncia de seu argumento direito. Os argumentos numé ricos
sã o primeiro convertidos em um tipo comum e o resultado é desse tipo.
Para operandos int, o resultado tem o mesmo tipo que os operandos, a menos que o segundo argumento seja negativo;
nesse caso, todos os argumentos sã o convertidos em ponto flutuante e um resultado ponto flutuante é entregue. Por
exemplo, 10**2 retorna 100, mas 10**-2 retorna 0.01.
Elevar 0.0 a uma potê ncia negativa resulta em uma exceçã o ZeroDivisionError. Elevar um nú mero negativo a
uma potê ncia fracioná ria resulta em um nú mero complex. (Em versõ es anteriores, levantava ValueError.)
Esta operaçã o pode ser personalizada usando os mé todos especial __pow__() e __rpow__().
O operador uná rio - (menos) produz a negaçã o de seu argumento numé rico; a operaçã o pode ser substituída pelo
mé todo especial __neg__().
O operador uná rio + (mais) produz seu argumento numé rico inalterado; a operaçã o pode ser substituída pelo mé todo
especial __pos__().
O operador uná rio ~ (inverter) produz a inversã o bit a bit de seu argumento inteiro. A inversã o bit a bit de x é definida
como -(x+1). Aplica-se apenas a nú meros inteiros ou a objetos personalizados que substituem o mé todo especial
__invert__().
Em todos os trê s casos, se o argumento nã o tiver o tipo adequado, uma exceçã o TypeError é levantada.
O operador * (multiplicaçã o) produz o produto de seus argumentos. Os argumentos devem ser nú meros ou um argu-
mento deve ser um nú mero inteiro e o outro deve ser uma sequê ncia. No primeiro caso, os nú meros sã o convertidos
para um tipo comum e depois multiplicados. Neste ú ltimo caso, é realizada a repetiçã o da sequê ncia; um fator de
repetiçã o negativo produz uma sequê ncia vazia.
Esta operaçã o pode ser personalizada usando os mé todos especial __mul__() e __rmul__().
O operador @ (arroba) deve ser usado para multiplicaçã o de matrizes. Nenhum tipo embutido do Python implementa
este operador.
Esta operaçã o pode ser personalizada usando os mé todos especial __matmul__() e __rmatmul__().
Adicionado na versã o 3.5.
Os operadores / (divisã o) e // (divisã o pelo piso) produzem o quociente de seus argumentos. Os argumentos nu-
mé ricos sã o primeiro convertidos em um tipo comum. A divisã o de inteiros produz um ponto flutuante, enquanto
a divisã o pelo piso de inteiros resulta em um inteiro; o resultado é o da divisã o matemá tica com a funçã o ‘floor’
aplicada ao resultado. A divisã o por zero levanta a exceçã o ZeroDivisionError.
A operaçã o de divisã o pode ser personalizada usando os mé todos especiais __truediv__() e __rtruediv__().
A operaçã o de divisã o pelo piso pode ser personalizada usando os mé todos especiais __floordiv__() e
__rfloordiv__().
O operador % (mó dulo) produz o restante da divisã o do primeiro argumento pelo segundo. Os argumentos numé ricos
sã o primeiro convertidos em um tipo comum. Um argumento zero à direita levanta a exceçã o ZeroDivisionError.
Os argumentos podem ser nú meros de ponto flutuante, por exemplo, 3.14%0.7 é igual a 0.34 (já que 3.14 é igual
a 4*0.7 + 0.34.) O operador mó dulo sempre produz um resultado com o mesmo sinal do seu segundo operando
(ou zero); o valor absoluto do resultado é estritamente menor que o valor absoluto do segundo operando1 .
1 Embora abs(x%y) < abs(y) seja verdadeiro matematicamente, para nú meros flutuantes pode nã o ser verdadeiro numericamente devido
ao arredondamento. Por exemplo, e presumindo uma plataforma na qual um float Python seja um nú mero de precisã o dupla IEEE 754, para
que -1e-100 % 1e100 tenha o mesmo sinal que 1e100, o resultado calculado é -1e-100 + 1e100, que é numericamente exatamente igual a
92 Capítulo 6. Expressões
The Python Language Reference, Release 3.13.0
Os operadores de divisã o pelo piso e mó dulo sã o conectados pela seguinte identidade: x == (x//y)*y + (x%y).
A divisã o pelo piso e o mó dulo també m estã o conectados com a funçã o embutida divmod(): divmod(x, y) ==
(x//y, x%y).2 .
Alé m de realizar a operaçã o de mó dulo em nú meros, o operador % també m é sobrecarregado por objetos string para
realizar a formataçã o de string no estilo antigo (també m conhecida como interpolaçã o). A sintaxe para formataçã o
de string é descrita na Referê ncia da Biblioteca Python, seçã o old-string-formatting.
A operaçã o módulo pode ser personalizada usando os mé todos especial __mod__() e __rmod__().
O operador de divisã o pelo piso, o operador de mó dulo e a funçã o divmod() nã o sã o definidos para nú meros
complexos. Em vez disso, converta para um nú mero de ponto flutuante usando a funçã o abs() se apropriado.
O operador + (adiçã o) produz a soma de seus argumentos. Os argumentos devem ser nú meros ou sequê ncias do
mesmo tipo. No primeiro caso, os nú meros sã o convertidos para um tipo comum e depois somados. Neste ú ltimo
caso, as sequê ncias sã o concatenadas.
Esta operaçã o pode ser personalizada usando os mé todos especial __add__() e __radd__().
O operador - (subtraçã o) produz a diferença de seus argumentos. Os argumentos numé ricos sã o primeiro convertidos
em um tipo comum.
Esta operaçã o pode ser personalizada usando os mé todos especial __sub__() e __rsub__().
Esses operadores aceitam nú meros inteiros como argumentos. Eles deslocam o primeiro argumento para a esquerda
ou para a direita pelo nú mero de bits fornecido pelo segundo argumento.
A operaçã o de deslocamento à esquerda pode ser personalizada usando os mé todos especiais __lshift__() e
__rlshift__(). A operaçã o de deslocamento à direita pode ser personalizada usando os mé todos especiais
__rshift__() e __rrshift__().
Um deslocamento para a direita por n bits é definido como divisã o pelo piso por pow(2,n). Um deslocamento à
esquerda por n bits é definido como multiplicaçã o com pow(2,n).
O operador & produz o E (AND) bit a bit de seus argumentos, que devem ser inteiros ou um deles deve ser um objeto
personalizado substituindo os mé todos especiais __and__() ou __rand__().
O operador ^ produz o XOR bit a bit (OU exclusivo) de seus argumentos, que devem ser inteiros ou um deles deve
ser um objeto personalizado sobrescrevendo os mé todos especiais __xor__() ou __rxor__().
O operador | produz o OU (OR) bit a bit de seus argumentos, que devem ser inteiros ou um deles deve ser um objeto
personalizado sobrescrevendo os mé todos especiais __or__() ou __ror__().
1e100. A funçã o [Link]() retorna um resultado cujo sinal corresponde ao sinal do primeiro argumento e, portanto, retorna -1e-100 neste
caso. Qual abordagem é mais apropriada depende da aplicaçã o.
2 Se x estiver muito pró ximo de um mú ltiplo inteiro exato de y, é possível que x//y seja maior que (x-x%y)//y devido ao arredondamento.
Nesses casos, Python retorna o ú ltimo resultado, para preservar que divmod(x,y)[0] * y + x % y esteja muito pró ximo de x.
6.10 Comparações
Ao contrá rio de C, todas as operaçõ es de comparaçã o em Python tê m a mesma prioridade, que é menor do que
qualquer operaçã o aritmé tica, de deslocamento ou bit a bit. També m diferentemente de C, expressõ es como a < b
< c tê m a interpretaçã o que é convencional em matemá tica:
Comparaçõ es produzem valores booleanos: True ou False. métodos de comparação rica personalizados podem
retornar valores nã o booleanos. Neste caso, o Python chamará bool() nesse valor em contextos booleanos.
As comparaçõ es podem ser encadeadas arbitrariamente, por exemplo, x < y <= z é equivalente a x < y and y
<= z, exceto que y é avaliado apenas uma vez (mas em ambos os casos z nã o é avaliado quando x < y é considerado
falso).
Formalmente, se a, b, c, …, y, z sã o expressõ es e op1, op2, …, opN sã o operadores de comparaçã o, entã o a op1
b op2 c ... y opN z é equivalente a a op1 b e b op2 c e ... y opN z, exceto que cada expressã o é
avaliada no má ximo uma vez.
Observe que a op1 b op2 c nã o implica qualquer tipo de comparaçã o entre a e c, de modo que, por exemplo, x
< y > z é perfeitamente vá lido (embora talvez nã o seja bonito).
94 Capítulo 6. Expressões
The Python Language Reference, Release 3.13.0
que os valores que nã o sã o numé ricos nã o sã o iguais a si mesmos. Por exemplo, se x = float('NaN'), 3
< x, x < 3 e x == x sã o todos falsos, enquanto x != x é verdadeiro. Esse comportamento é compatível
com IEEE 754.
• None e NotImplemented sã o singletons. PEP 8 aconselha que comparaçõ es para singletons devem sempre
ser feitas com is ou is not, nunca com os operadores de igualdade.
• Sequê ncias biná rias (instâ ncias de bytes ou bytearray) podem ser comparadas dentro e entre seus tipos.
Eles comparam lexicograficamente usando os valores numé ricos de seus elementos.
• Strings (instâ ncias de str) sã o comparadas lexicograficamente usando os pontos de có digo Unicode numé ricos
(o resultado da funçã o embutida ord()) de seus caracteres.3
Strings e sequê ncias biná rias nã o podem ser comparadas diretamente.
• Sequê ncias (instâ ncias de tuple, list ou range) podem ser comparadas apenas dentro de cada um de
seus tipos, com a restriçã o de que intervalos nã o oferecem suporte a comparaçã o de ordem. A comparaçã o
de igualdade entre esses tipos resulta em desigualdade, e a comparaçã o ordenada entre esses tipos levanta
TypeError.
As sequê ncias sã o comparadas lexicograficamente usando a comparaçã o de elementos correspondentes. Os
contê ineres embutidos normalmente presumem que objetos idê nticos sã o iguais a si mesmos. Isso permite
ignorar testes de igualdade para objetos idê nticos para melhorar o desempenho e manter seus invariantes
internos.
A comparaçã o lexicográ fica entre coleçõ es embutidas funciona da seguinte forma:
– Para que duas coleçõ es sejam comparadas iguais, elas devem ser do mesmo tipo, ter o mesmo com-
primento e cada par de elementos correspondentes deve ser comparado igual (por exemplo, [1,2] ==
(1,2) é false porque o tipo nã o é o mesmo).
– Coleçõ es que oferecem suporte a comparaçã o de ordem sã o ordenadas da mesma forma que seus primei-
ros elementos desiguais (por exemplo, [1,2,x] <= [1,2,y] tem o mesmo valor que x <= y). Se
um elemento correspondente nã o existir, a coleçã o mais curta é ordenada primeiro (por exemplo, [1,2]
< [1,2,3] é verdadeiro).
• Mapeamentos (instâ ncias de dict) comparam iguais se e somente se eles tiverem pares (chave, valor)
iguais. A comparaçã o de igualdade das chaves e valores reforça a reflexividade.
Comparaçõ es de ordem (<, >, <= e >=) levantam TypeError.
• Conjuntos (instâ ncias de set ou frozenset) podem ser comparados dentro e entre seus tipos.
Eles definem operadores de comparaçã o de ordem para significar testes de subconjunto e superconjunto. Essas
relaçõ es nã o definem ordenaçõ es totais (por exemplo, os dois conjuntos {1,2} e {2,3} nã o sã o iguais, nem
subconjuntos um do outro, nem superconjuntos um do outro). Consequentemente, conjuntos nã o sã o argu-
mentos apropriados para funçõ es que dependem de ordenaçã o total (por exemplo, min(), max() e sorted()
produzem resultados indefinidos dada uma lista de conjuntos como entradas) .
A comparaçã o de conjuntos reforça a reflexividade de seus elementos.
• A maioria dos outros tipos embutidos nã o possui mé todos de comparaçã o implementados, portanto, eles her-
dam o comportamento de comparaçã o padrã o.
As classes definidas pelo usuá rio que personalizam seu comportamento de comparaçã o devem seguir algumas regras
de consistê ncia, se possível:
3 O padrã o Unicode distingue entre pontos de código (por exemplo, U+0041) e caracteres abstratos (por exemplo, “LATIN CAPITAL LETTER
A”). Embora a maioria dos caracteres abstratos em Unicode sejam representados apenas por meio de um ponto de có digo, há vá rios caracteres
abstratos que també m podem ser representados por meio de uma sequê ncia de mais de um ponto de có digo. Por exemplo, o caractere abstrato
“LATIN CAPITAL LETTER C WITH CEDILLA” pode ser representado como um ú nico caractere pré-composto na posiçã o de có digo U+00C7,
ou como uma sequê ncia de um caractere base na posiçã o de có digo U+0043 (LATIN CAPITAL LETTER C), seguido por um caractere de
combinação na posiçã o de có digo U+0327 (COMBINING CEDILLA).
Os operadores de comparaçã o em strings sã o comparados no nível dos pontos de có digo Unicode. Isso pode ser contraintuitivo para os huma-
nos. Por exemplo, "\u00C7" == "\u0043\u0327" é False, mesmo que ambas as strings representem o mesmo caractere abstrato “LATIN
CAPITAL LETTER C WITH CEDILLA”.
Para comparar strings no nível de caracteres abstratos (ou seja, de uma forma intuitiva para humanos), use [Link]().
6.10. Comparações 95
The Python Language Reference, Release 3.13.0
• A comparaçã o da igualdade deve ser reflexiva. Em outras palavras, objetos idê nticos devem ser comparados
iguais:
x is y implica em x == y
• A comparaçã o deve ser simé trica. Em outras palavras, as seguintes expressõ es devem ter o mesmo resultado:
x == y e y == x
x != y e y != x
• A comparaçã o deve ser transitiva. Os seguintes exemplos (nã o exaustivos) ilustram isso:
x > y and y > z implica em x > z
As duas ú ltimas expressõ es aplicam-se a coleçõ es totalmente ordenadas (por exemplo, a sequê ncias, mas nã o
a conjuntos ou mapeamentos). Veja també m o decorador total_ordering().
• O resultado hash() deve ser consistente com a igualdade. Objetos iguais devem ter o mesmo valor de hash
ou ser marcados como nã o-hasheá veis.
Python nã o impõ e essas regras de consistê ncia. Na verdade, os valores nã o numé ricos sã o um exemplo de nã o
cumprimento dessas regras.
Para classes definidas pelo usuá rio que definem o mé todo __contains__(), x in y retorna True se y.
__contains__(x) retorna um valor verdadeiro, e False caso contrá rio.
Para classes definidas pelo usuá rio que nã o definem __contains__(), mas definem __iter__(), x in y é True
se algum valor z, para a qual a expressã o x is z or x == z é verdadeira, é produzida durante a iteraçã o sobre
y. Se uma exceçã o for levantada durante a iteraçã o, é como se in tivesse levantado essa exceçã o.
Por ú ltimo, o protocolo de iteraçã o de estilo antigo é tentado: se uma classe define __getitem__(), x in y é
True se, e somente se, houver um índice inteiro nã o negativo i tal que x is y[i] or x == y[i], e nenhum
índice inteiro inferior levanta a exceçã o IndexError. (Se qualquer outra exceçã o for levantada, é como se in
levantasse essa exceçã o).
O operador not in é definido para ter o valor verdade inverso de in.
96 Capítulo 6. Expressões
The Python Language Reference, Release 3.13.0
if matching := [Link](data):
do_something(matching)
As expressõ es de atribuiçã o devem ser colocadas entre parê nteses quando usadas como instruçõ es de expressã o e
quando usadas como subexpressõ es em expressõ es de fatiamento, condicionais, de lambda, de argumento nomeado e
de if de compreensã o e em instruçõ es assert, with e assignment. Em todos os outros lugares onde eles podem
ser usados, os parê nteses nã o sã o necessá rios, inclusive nas instruçõ es if e while.
Adicionado na versã o 3.8: Veja PEP 572 para mais detalhes sobre expressõ es de atribuiçã o.
4Devido à coleta de lixo automá tica, à s listas livres e à natureza dinâ mica dos descritores, você pode notar um comportamento aparente-
mente incomum em certos usos do operador is, como aqueles que envolvem comparaçõ es entre mé todos de instâ ncia ou constantes. Confira a
documentaçã o para obter mais informaçõ es.
6.14 Lambdas
def <lambda>(parâmetros):
return expressão
Veja a seçã o Definições de função para a sintaxe das listas de parâ metros. Observe que as funçõ es criadas com
expressõ es lambda nã o podem conter instruçõ es ou anotaçõ es.
98 Capítulo 6. Expressões
The Python Language Reference, Release 3.13.0
Operador Descrição
(expressions...), Expressã o entre parê nteses ou de ligaçã o, sintaxe de criaçã o de
[expressões...], {chave: valor... lista, sintaxe de criaçã o de dicioná rio, sintaxe de criaçã o de con-
}, {expressões...} junto
x[índice], x[índice:índice], subscriçã o, fatiamento, chamada, referê ncia a atributo
x(argumentos...), [Link]
await x Expressã o await
** Exponenciaçã o5
+x, -x, ~x positivo, negativo, NEGAÇÃO (NOT) bit a bit
*, @, /, //, % Multiplicaçã o, multiplicaçã o de matrizes, divisã o, divisã o pelo
piso, resto6
+, - Adiçã o e subtraçã o
<<, >> Deslocamentos
& E (AND) bit a bit
^ OU EXCLUSIVO (XOR) bit a bit
| OU (OR) bit a bit
in, not in, is, is not, <, <=, >, >=, !=, Comparaçõ es, incluindo testes de pertinê ncia e testes de identi-
== dade
not x NEGAÇÃO (NOT) booleana
and E (AND) booleano
or OU (OR) booleano
if – else Expressã o condicional
lambda Expressã o lambda
:= Expressã o de atribuiçã o
5 O operador de potê ncia ** liga-se com menos força do que um operador aritmé tico ou uná rio bit a bit à sua direita, ou seja, 2**-1 é 0.5.
6 O operador % també m é usado para formataçã o de strings; a mesma precedê ncia se aplica.
Instruções simples
Uma instruçã o simples consiste uma ú nica linha ló gica. Vá rias instruçõ es simples podem ocorrer em uma ú nica linha
separada por ponto e vírgula. A sintaxe para instruçõ es simples é :
Uma instruçã o de expressã o avalia a lista de expressõ es (que pode ser uma ú nica expressã o).
No modo interativo, se o valor nã o for None, ele será convertido em uma string usando a funçã o embutida repr()
e a string resultante será gravada na saída padrã o em uma linha sozinha (exceto se o resultado é None, de modo que
101
The Python Language Reference, Release 3.13.0
solicitado a atribuir o objeto atribuído ao atributo fornecido; se nã o puder executar a atribuiçã o, ele levanta
uma exceçã o (geralmente, mas nã o necessariamente AttributeError).
Nota: Se o objeto for uma instâ ncia de classe e a referê ncia de atributo ocorrer em ambos os lados do operador
de atribuiçã o, a expressã o do lado direito, a.x pode acessar um atributo de instâ ncia ou (se nã o existir nenhum
atributo de instâ ncia) uma classe atributo. O alvo do lado esquerdo a.x é sempre definido como um atributo
de instâ ncia, criando-o se necessá rio. Assim, as duas ocorrê ncias de a.x nã o necessariamente se referem ao
mesmo atributo: se a expressã o do lado direito se refere a um atributo de classe, o lado esquerdo cria um novo
atributo de instâ ncia como alvo da atribuiçã o:
class Cls:
x = 3 # variável de classe
inst = Cls()
inst.x = inst.x + 1 # escreve inst.x como 4 deixando Cls.x como 3
Esta descriçã o nã o se aplica necessariamente aos atributos do descritor, como propriedades criadas com
property().
• Se o alvo for uma assinatura: a expressã o primá ria na referê ncia é avaliada. Deve produzir um objeto de
sequê ncia mutá vel (como uma lista) ou um objeto de mapeamento (como um dicioná rio). Em seguida, a
expressã o subscrito é avaliada.
Se o primá rio for um objeto de sequê ncia mutá vel (como uma lista), o subscrito deverá produzir um inteiro.
Se for negativo, o comprimento da sequê ncia é adicionado a ela. O valor resultante deve ser um inteiro nã o
negativo menor que o comprimento da sequê ncia, e a sequê ncia é solicitada a atribuir o objeto atribuído ao seu
item com esse índice. Se o índice estiver fora do intervalo, a exceçã o IndexError será levantada (a atribuiçã o
a uma sequê ncia subscrita nã o pode adicionar novos itens a uma lista).
Se o primá rio for um objeto de mapeamento (como um dicioná rio), o subscrito deve ter um tipo compatível
com o tipo de chave do mapeamento, e o mapeamento é solicitado a criar um par chave/valore que mapeia o
subscrito para o objeto atribuído. Isso pode substituir um par de chave/valor existente pelo mesmo valor de
chave ou inserir um novo par de chave/valor (se nã o existir nenhuma chave com o mesmo valor).
Para objetos definidos pelo usuá rio, o mé todo __setitem__() é chamado com argumentos apropriados.
• Se o alvo for um fatiamento: a expressã o primá ria na referê ncia é avaliada. Deve produzir um objeto de
sequê ncia mutá vel (como uma lista). O objeto atribuído deve ser um objeto de sequê ncia do mesmo tipo. Em
seguida, as expressõ es de limite inferior e superior sã o avaliadas, na medida em que estiverem presentes; os
padrõ es sã o zero e o comprimento da sequê ncia. Os limites devem ser avaliados como inteiros. Se um dos
limites for negativo, o comprimento da sequê ncia será adicionado a ele. Os limites resultantes sã o cortados para
ficarem entre zero e o comprimento da sequê ncia, inclusive. Finalmente, o objeto de sequê ncia é solicitado a
substituir a fatia pelos itens da sequê ncia atribuída. O comprimento da fatia pode ser diferente do comprimento
da sequê ncia atribuída, alterando assim o comprimento da sequê ncia alvo, se a sequê ncia alvo permitir.
Detalhes da implementação do CPython: Na implementaçã o atual, a sintaxe dos alvos é considerada a mesma das
expressõ es e a sintaxe invá lida é rejeitada durante a fase de geraçã o do có digo, causando mensagens de erro menos
detalhadas.
Embora a definiçã o de atribuiçã o implique que as sobreposiçõ es entre o lado esquerdo e o lado direito sejam “simul-
tâ neas” (por exemplo, a, b = b, a troca duas variá veis), sobreposiçõ es dentro da coleçã o de variá veis atribuídas
ocorrem da esquerda para a direita, à s vezes resultando em confusã o. Por exemplo, o programa a seguir imprime
[0, 2]:
x = [0, 1]
i = 0
i, x[i] = 1, 2 # i é atualizado e, em seguida, x[i] é atualizado
print(x)
µ Ver também
(Veja a seçã o Primárias para as definiçõ es de sintaxe dos ú ltimos trê s símbolos.)
Uma atribuiçã o aumentada avalia o alvo (que, diferentemente das instruçõ es de atribuiçã o normais, nã o pode ser um
desempacotamento) e a lista de expressõ es, executa a operaçã o biná ria específica para o tipo de atribuiçã o nos dois
operandos e atribui o resultado ao alvo original. O alvo é avaliado apenas uma vez.
Uma instruçã o de atribuiçã o aumentada como x += 1 pode ser reescrita como x = x + 1 para obter um efeito
semelhante, mas nã o exatamente igual. Na versã o aumentada, x é avaliado apenas uma vez. Alé m disso, quando
possível, a operaçã o real é executada no local, o que significa que, em vez de criar um novo objeto e atribuí-lo ao
alvo, o objeto antigo é modificado.
Ao contrá rio das atribuiçõ es normais, as atribuiçõ es aumentadas avaliam o lado esquerdo antes de avaliar o lado
direito. Por exemplo, a[i] += f(x) primeiro procura a[i], entã o avalia f(x) e executa a adiçã o e, por ú ltimo,
escreve o resultado de volta para a[i].
Com exceçã o da atribuiçã o a tuplas e vá rios alvos em uma ú nica instruçã o, a atribuiçã o feita por instruçõ es de
atribuiçã o aumentada é tratada da mesma maneira que atribuiçõ es normais. Da mesma forma, com exceçã o do
possível comportamento in-place, a operaçã o biná ria executada por atribuiçã o aumentada é a mesma que as operaçõ es
biná rias normais.
Para alvos que sã o referê ncias de atributos, a mesma advertência sobre atributos de classe e instância se aplica a
atribuiçõ es regulares.
A diferença para as Instruções de atribuição normal é que apenas um ú nico alvo é permitido.
O alvo da atribuiçã o é considerado “simples” se consistir em um ú nico nome que nã o esteja entre parê nteses. Para
alvos de atribuiçã o simples, se no escopo de classe ou mó dulo, as anotaçõ es sã o avaliadas e armazenadas em uma
classe especial ou atributo de mó dulo __annotations__ que é um mapeamento de dicioná rio de nomes de variá veis
(desconfigurados se privados) para anotaçõ es avaliadas. Este atributo é gravá vel e é criado automaticamente no início
da execuçã o do corpo da classe ou mó dulo, se as anotaçõ es forem encontradas estaticamente.
Se o alvo da atribuiçã o nã o for simples (um atributo, nó subscrito ou nome entre parê nteses), a anotaçã o será avaliada
se estiver no escopo da classe ou do mó dulo, mas nã o será armazenada.
Se um nome for anotado em um escopo de funçã o, esse nome será local para esse escopo. As anotaçõ es nunca sã o
avaliadas e armazenadas em escopos de funçã o.
Se o lado direito estiver presente, uma atribuiçã o anotada executa a atribuiçã o real antes de avaliar as anotaçõ es
(quando aplicá vel). Se o lado direito nã o estiver presente para um alvo de expressã o, entã o o interpretador avalia o
alvo, exceto para a ú ltima chamada __setitem__() ou __setattr__().
µ Ver também
Alterado na versã o 3.8: Agora, as atribuiçõ es anotadas permitem as mesmas expressõ es no lado direito que as atri-
buiçõ es regulares. Anteriormente, algumas expressõ es (como expressõ es de tupla sem parê nteses) causavam um erro
de sintaxe.
if __debug__:
if not expression: raise AssertionError
if __debug__:
if not expression1: raise AssertionError(expression2)
Essas equivalê ncias presumem que __debug__ e AssertionError referem-se à s variá veis embutidas com esses
nomes. Na implementaçã o atual, a variá vel embutida __debug__ é True em circunstâ ncias normais, False quando
a otimizaçã o é solicitada (opçã o de linha de comando -O). O gerador de có digo atual nã o emite có digo para uma
instruçã o assert quando a otimizaçã o é solicitada em tempo de compilaçã o. Observe que nã o é necessá rio incluir o
có digo-fonte da expressã o que falhou na mensagem de erro; ele será exibido como parte do stack trace (situaçã o da
pilha de execuçã o).
Atribuiçõ es a __debug__ sã o ilegais. O valor da variá vel embutida é determinado quando o interpretador é iniciado.
pass é uma operaçã o nula — quando é executada, nada acontece. É ú til como um espaço reservado quando uma
instruçã o é necessá ria sintaticamente, mas nenhum có digo precisa ser executado, por exemplo:
A exclusã o de referê ncias de atributos, assinaturas e fatias é passada para o objeto principal envolvido; a exclusã o de
um fatiamento é em geral equivalente à atribuiçã o de uma fatia vazia do tipo certo (mas mesmo isso é determinado
pelo objeto fatiado).
Alterado na versã o 3.2: Anteriormente, era ilegal excluir um nome do espaço de nomes local se ele ocorresse como
uma variá vel livre em um bloco aninhado.
Quando return passa o controle de uma instruçã o try com uma clá usula finally , essa clá usula finally é
executada antes de realmente sair da funçã o.
Em uma funçã o geradora, a instruçã o return indica que o gerador está pronto e fará com que StopIteration
seja gerado. O valor retornado (se houver) é usado como argumento para construir StopIteration e se torna o
atributo [Link].
Em uma funçã o de gerador assíncrono, uma instruçã o return vazia indica que o gerador assíncrono está pronto e
fará com que StopAsyncIteration seja gerado. Uma instruçã o return nã o vazia é um erro de sintaxe em uma
funçã o de gerador assíncrono.
yield <expr>
yield from <expr>
(yield <expr>)
(yield from <expr>)
Expressõ es e instruçõ es yield sã o usadas apenas ao definir uma funçã o geradora e sã o usadas apenas no corpo da
funçã o geradora. Usar yield em uma definiçã o de funçã o é suficiente para fazer com que essa definiçã o crie uma
funçã o geradora em vez de uma funçã o normal.
Para detalhes completos da semâ ntica yield, consulte a seçã o Expressões yield.
A clá usula from é usada para encadeamento de exceçõ es: se fornecida, a segunda expressã o, expression, deve ser
outra classe ou instâ ncia de exceçã o. Se a segunda expressã o for uma instâ ncia de exceçã o, ela será anexada à
exceçã o levantada como o atributo __cause__ (que é gravá vel). Se a expressã o for uma classe de exceçã o, a classe
será instanciada e a instâ ncia de exceçã o resultante será anexada à exceçã o levantada como o atributo __cause__.
Se a exceçã o levantada nã o for tratada, ambas as exceçõ es serã o impressas:
>>> try:
... print(1 / 0)
... except Exception as exc:
... raise RuntimeError("Something bad happened") from exc
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
print(1 / 0)
~~^~~
ZeroDivisionError: division by zero
The above exception was the direct cause of the following exception:
Um mecanismo semelhante funciona implicitamente se uma nova exceçã o for levantada quando uma exceçã o já
estiver sendo tratada. Uma exceçã o pode ser tratada quando uma clá usula except ou finally , ou uma instruçã o
with, é usada. A exceçã o anterior é entã o anexada como o atributo __context__ da nova exceçã o:
>>> try:
... print(1 / 0)
... except:
... raise RuntimeError("Something bad happened")
(continua na pró xima pá gina)
O encadeamento de exceçã o pode ser explicitamente suprimido especificando None na clá usula from:
>>> try:
... print(1 / 0)
... except:
... raise RuntimeError("Something bad happened") from None
...
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
RuntimeError: Something bad happened
Informaçõ es adicionais sobre exceçõ es podem ser encontradas na seçã o Exceções, e informaçõ es sobre como lidar
com exceçõ es estã o na seçã o A instrução try.
Alterado na versã o 3.3: None agora é permitido como Y em raise X from Y.
Adicionado o atributo __suppress_context__ para suprimir a exibiçã o automá tica do contexto de exceçã o.
Alterado na versã o 3.11: Se o traceback da exceçã o ativa for modificado em uma clá usula except, uma instruçã o
raise subsequente levantará novamente a exceçã o com o traceback modificado. Anteriormente, a exceçã o era
levantada novamente com o traceback que tinha quando foi capturada.
Quando continue passa o controle de uma instruçã o try com uma clá usula finally , essa clá usula finally é
executada antes realmente iniciar o pró ximo ciclo do laço.
import_stmt ::= "import" module ["as" identifier] ("," module ["as" identifier])*
| "from" relative_module "import" identifier ["as" identifier]
("," identifier ["as" identifier])*
| "from" relative_module "import" "(" identifier ["as" identifier]
("," identifier ["as" identifier])* [","] ")"
| "from" relative_module "import" "*"
module ::= (identifier ".")* identifier
relative_module ::= "."* module | "."+
A instruçã o de importaçã o bá sica (sem clá usula from) é executada em duas etapas:
1. encontra um mó dulo, carregando e inicializando-o se necessá rio
2. define um nome ou nomes no espaço de nomes local para o escopo onde ocorre a instruçã o import.
Quando a instruçã o conté m vá rias clá usulas (separadas por vírgulas), as duas etapas sã o executadas separadamente
para cada clá usula, como se as clá usulas tivessem sido separadas em instruçõ es de importaçã o individuais.
Os detalhes da primeira etapa, encontrar e carregar mó dulos, estã o descritos com mais detalhes na seçã o sobre o
sistema de importação, que també m descreve os vá rios tipos de pacotes e mó dulos que podem ser importados, bem
como todos os os ganchos que podem ser usados para personalizar o sistema de importaçã o. Observe que falhas
nesta etapa podem indicar que o mó dulo nã o pô de ser localizado ou que ocorreu um erro durante a inicializaçã o do
mó dulo, o que inclui a execuçã o do có digo do mó dulo.
Se o mó dulo solicitado for recuperado com sucesso, ele será disponibilizado no espaço de nomes local de trê s ma-
neiras:
• Se o nome do mó dulo é seguido pela palavra reservada as, o nome a seguir é vinculado diretamente ao mó dulo
importado.
• Se nenhum outro nome for especificado e o mó dulo que está sendo importado for um mó dulo de nível superior,
o nome do mó dulo será vinculado ao espaço de nomes local como uma referê ncia ao mó dulo importado
• Se o mó dulo que está sendo importado não for um mó dulo de nível superior, o nome do pacote de nível
superior que conté m o mó dulo será vinculado ao espaço de nomes local como uma referê ncia ao pacote de
nível superior. O mó dulo importado deve ser acessado usando seu nome completo e nã o diretamente
O formulá rio from usa um processo um pouco mais complexo:
1. encontra o mó dulo especificado na clá usula from, carregando e inicializando-o se necessá rio;
2. para cada um dos identificadores especificados nas clá usulas import:
1. verifica se o mó dulo importado tem um atributo com esse nome
2. caso contrá rio, tenta importar um submó dulo com esse nome e verifica o mó dulo importado novamente
para esse atributo
3. se o atributo nã o for encontrado, a exceçã o ImportError é levantada.
4. caso contrá rio, uma referê ncia a esse valor é armazenada no espaço de nomes local, usando o nome na
clá usula as se estiver presente, caso contrá rio, usando o nome do atributo
Exemplos:
from foo import attr # foo imported and [Link] bound as attr
Se a lista de identificadores for substituída por uma estrela ('*'), todos os nomes pú blicos definidos no mó dulo serã o
vinculados ao espaço de nomes local para o escopo onde ocorre a instruçã o import.
Os nomes públicos definidos por um mó dulo sã o determinados verificando o espaço de nomes do mó dulo para uma
variá vel chamada __all__; se definido, deve ser uma sequê ncia de strings que sã o nomes definidos ou importados
por esse mó dulo. Os nomes dados em __all__ sã o todos considerados pú blicos e devem existir. Se __all__ nã o
estiver definido, o conjunto de nomes pú blicos inclui todos os nomes encontrados no espaço de nomes do mó dulo que
nã o começam com um caractere sublinhado ('_'). __all__ deve conter toda a API pú blica. Destina-se a evitar
a exportaçã o acidental de itens que nã o fazem parte da API (como mó dulos de biblioteca que foram importados e
usados no mó dulo).
A forma curinga de importaçã o — from module import * — só é permitida no nível do mó dulo. Tentar usá -lo
em definiçõ es de classe ou funçã o irá levantar uma SyntaxError.
Ao especificar qual mó dulo importar, você nã o precisa especificar o nome absoluto do mó dulo. Quando um mó dulo
ou pacote está contido em outro pacote, é possível fazer uma importaçã o relativa dentro do mesmo pacote superior
sem precisar mencionar o nome do pacote. Usando pontos iniciais no mó dulo ou pacote especificado apó s from você
pode especificar quã o alto percorrer a hierarquia de pacotes atual sem especificar nomes exatos. Um ponto inicial
significa o pacote atual onde o mó dulo que faz a importaçã o existe. Dois pontos significam um nível de pacote acima.
Trê s pontos sã o dois níveis acima, etc. Entã o, se você executar from . import mod de um mó dulo no pacote
pkg entã o você acabará importando o [Link]. Se você executar from ..subpkg2 import mod de dentro de
pkg.subpkg1 você irá importar [Link]. A especificaçã o para importaçõ es relativas está contida na
seçã o Importações relativas ao pacote.
importlib.import_module() é fornecida para dar suporte a aplicaçõ es que determinam dinamicamente os mó -
dulos a serem carregados.
Levanta um evento de auditoria import com os argumentos module, filename, [Link], sys.meta_path,
sys.path_hooks.
Uma instruçã o future deve aparecer perto do topo do mó dulo. As ú nicas linhas que podem aparecer antes de uma
instruçã o future sã o:
• o mó dulo docstring (se houver),
• omentá rios,
• linhas vazias e
• outras instruçõ es future.
O ú nico recurso que requer o uso da instruçã o future é annotations (veja PEP 563).
Todos os recursos histó ricos habilitados pela instruçã o future ainda sã o reconhecidos pelo Python 3. A lista inclui
absolute_import, division, generators, generator_stop, unicode_literals, print_function,
nested_scopes e with_statement. Eles sã o todos redundantes porque estã o sempre habilitados e mantidos
apenas para compatibilidade com versõ es anteriores.
Uma instruçã o future é reconhecida e tratada especialmente em tempo de compilaçã o: as alteraçõ es na semâ ntica das
construçõ es principais sã o frequentemente implementadas gerando có digo diferente. Pode até ser o caso de um novo
recurso introduzir uma nova sintaxe incompatível (como uma nova palavra reservada), caso em que o compilador
pode precisar analisar o mó dulo de maneira diferente. Tais decisõ es nã o podem ser adiadas até o tempo de execuçã o.
Para qualquer versã o, o compilador sabe quais nomes de recursos foram definidos e levanta um erro em tempo de
compilaçã o se uma instruçã o future contiver um recurso desconhecido.
A semâ ntica do tempo de execuçã o direto é a mesma de qualquer instruçã o de importaçã o: existe um mó dulo padrã o
__future__, descrito posteriormente, e será importado da maneira usual no momento em que a instruçã o future
for executada.
A semâ ntica interessante do tempo de execuçã o depende do recurso específico ativado pela instruçã o future.
Observe que nã o há nada de especial sobre a instruçã o:
Essa nã o é uma instruçã o future; é uma instruçã o de importaçã o comum sem nenhuma semâ ntica especial ou restri-
çõ es de sintaxe.
O có digo compilado por chamadas para as funçõ es embutidas exec() e compile() que ocorrem em um mó dulo M
contendo uma instruçã o future usará , por padrã o, a nova sintaxe ou semâ ntica associada com a instruçã o future. Isso
pode ser controlado por argumentos opcionais para compile() – veja a documentaçã o dessa funçã o para detalhes.
Uma instruçã o future tipada digitada em um prompt do interpretador interativo terá efeito no restante da sessã o do
interpretador. Se um interpretador for iniciado com a opçã o -i, for passado um nome de script para ser executado
e o script incluir uma instruçã o future, ela entrará em vigor na sessã o interativa iniciada apó s a execuçã o do script.
µ Ver também
Detalhes da implementação do CPython: A implementaçã o atual nã o impõ e algumas dessas restriçõ es, mas os
programas nã o devem abusar dessa liberdade, pois implementaçõ es future podem aplicá -las ou alterar silenciosa-
mente o significado do programa.
Nota do programador: global é uma diretiva para o analisador sintá tico. Aplica-se apenas ao có digo analisado
ao mesmo tempo que a instruçã o global. Em particular, uma instruçã o global contida em uma string ou objeto
có digo fornecido à funçã o embutida exec() nã o afeta o bloco de có digo contendo a chamada da funçã o e o có digo
contido em tal uma string nã o é afetada por instruçõ es global no có digo que conté m a chamada da funçã o. O
mesmo se aplica à s funçõ es eval() e compile().
µ Ver também
Nota do programador: nonlocal é uma diretiva para o analisador sintá tico e se aplica apenas ao có digo analisado
junto com ele. Veja a nota para a instruçã o global.
annotation-def VALUE_OF_Point():
return tuple[float, float]
Point = [Link]("Point", VALUE_OF_Point())
annotation-def indica um escopo de anotação, que se comporta principalmente como uma funçã o, mas com
diversas pequenas diferenças.
O valor do apelido de tipo é avaliado no escopo de anotaçã o. Ele nã o é avaliado quando o apelido de tipo é criado, mas
somente quando o valor é acessado atravé s do atributo __value__ do apelido de tipo (veja Avaliação preguiçosa).
Isso permite que o apelido de tipo se refira a nomes que ainda nã o estã o definidos.
Apelidos de tipo podem se tornar gené ricos adicionando uma lista de parâmetros de tipo apó s o nome. Veja Generic
type aliases para mais.
type é uma palavra reservada contextual.
µ Ver também
Instruções compostas
Instruçõ es compostas conté m (grupos de) outras instruçõ es; Elas afetam ou controlam a execuçã o dessas outras
instruçõ es de alguma maneira. Em geral, instruçõ es compostas abrangem mú ltiplas linhas, no entanto em algumas
manifestaçõ es simples uma instruçã o composta inteira pode estar contida em uma linha.
As instruçõ es if , while e for implementam construçõ es tradicionais de controle do fluxo de execuçã o. try espe-
cifica tratadores de exceçã o e/ou có digo de limpeza para uma instruçã o ou grupo de instruçõ es, enquanto a palavra
reservada with permite a execuçã o de có digo de inicializaçã o e finalizaçã o em volta de um bloco de có digo. Defi-
niçõ es de funçã o e classe també m sã o sintaticamente instruçõ es compostas.
Uma instruçã o composta consiste em uma ou mais “clá usulas”. Uma clá usula consiste em um cabeçalho e um “con-
junto”. Os cabeçalhos das clá usulas de uma instruçã o composta específica estã o todos no mesmo nível de indentaçã o.
Cada cabeçalho de clá usula começa com uma palavra reservada de identificaçã o exclusiva e termina com dois pon-
tos. Um conjunto é um grupo de instruçõ es controladas por uma clá usula. Um conjunto pode ser uma ou mais
instruçõ es simples separadas por ponto e vírgula na mesma linha do cabeçalho, apó s os dois pontos do cabeçalho,
ou pode ser uma ou mais instruçõ es indentadas nas linhas subsequentes. Somente a ú ltima forma de conjunto pode
conter instruçõ es compostas aninhadas; o seguinte é ilegal, principalmente porque nã o ficaria claro a qual clá usula
if a seguinte clá usula else pertenceria:
Observe també m que o ponto e vírgula é mais vinculado que os dois pontos neste contexto, de modo que no exemplo
a seguir, todas ou nenhuma das chamadas print() sã o executadas:
Resumindo:
115
The Python Language Reference, Release 3.13.0
| async_for_stmt
| async_funcdef
suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
statement ::= stmt_list NEWLINE | compound_stmt
stmt_list ::= simple_stmt (";" simple_stmt)* [";"]
Note que instruçõ es sempre terminam em uma NEWLINE possivelmente seguida por uma DEDENT. Note també m que
clá usulas opcionais de continuaçã o sempre começam com uma palavra reservada que nã o pode iniciar uma instruçã o,
desta forma nã o há ambiguidades (o problema do “else pendurado” é resolvido em Python obrigando que instruçõ es
if aninhadas tenham indentaçã o)
A formataçã o das regras de gramá tica nas pró ximas seçõ es põ e cada clá usula em uma linha separada para as tornar
mais claras.
8.1 A instrução if
A instruçã o if é usada para execuçã o condicional:
Ele seleciona exatamente um dos conjuntos avaliando as expressõ es uma por uma até que uma seja considerada
verdadeira (veja a seçã o Operações booleanas para a definiçã o de verdadeiro e falso); entã o esse conjunto é executado
(e nenhuma outra parte da instruçã o if é executada ou avaliada). Se todas as expressõ es forem falsas, o conjunto da
clá usula else, se presente, é executado.
Isto testa repetidamente a expressã o e, se for verdadeira, executa o primeiro conjunto; se a expressã o for falsa (o que
pode ser a primeira vez que ela é testada) o conjunto da clá usula else, se presente, é executado e o laço termina.
Uma instruçã o break executada no primeiro conjunto termina o loop sem executar o conjunto da clá usula else.
Uma instruçã o continue executada no primeiro conjunto ignora o resto do conjunto e volta a testar a expressã o.
A expressã o starred_list é avaliada uma vez; deve produzir um objeto iterável. Um iterador é criado para esse
iterá vel. O primeiro item fornecido pelo iterador é entã o atribuído à lista de alvos usando as regras padrã o para
atribuiçõ es (veja Instruções de atribuição), e o conjunto é executado. Isso se repete para cada item fornecido pelo
iterador. Quando o iterador se esgota, o conjunto na clá usula else, se presente, é executado e o loop termina.
Uma instruçã o break executada no primeiro conjunto termina o loop sem executar o conjunto da clá usula else.
Uma instruçã o continue executada no primeiro conjunto pula o resto do conjunto e continua com o pró ximo item,
ou com a clá usula else se nã o houver pró ximo item.
O laço for faz atribuiçõ es à s variá veis na lista de destino. Isso substitui todas as atribuiçõ es anteriores a essas variá veis,
incluindo aquelas feitas no conjunto do laço for:
for i in range(10):
print(i)
i = 5 # this will not affect the for-loop
# because i will be overwritten with the next
# index in the range
Os nomes na lista de destinos nã o sã o excluídos quando o laço termina, mas se a sequê ncia estiver vazia, eles nã o
serã o atribuídos pelo laço. Dica: o tipo embutido range() representa sequê ncias aritmé ticas imutá veis de inteiros.
Por exemplo, iterar range(3) sucessivamente produz 0, 1 e depois 2.
Alterado na versã o 3.11: Elementos marcados com estrela agora sã o permitidos na lista de expressõ es.
Informaçõ es adicionais sobre exceçõ es podem ser encontradas na seçã o Exceções, e informaçõ es sobre como usar a
instruçã o raise para gerar exceçõ es podem ser encontradas na seçã o A instrução raise.
Quando uma clá usula except correspondente é encontrada, a exceçã o é atribuída ao destino especificado apó s a
palavra reservada as nessa clá usula except, se presente, e o conjunto da clá usula except é executado. Todas
as clá usulas except devem ter um bloco executá vel. Quando o final deste bloco é atingido, a execuçã o continua
normalmente apó s toda a instruçã o try . (Isso significa que se existirem dois manipuladores aninhados para a mesma
exceçã o, e a exceçã o ocorrer na clá usula try do manipulador interno, o manipulador externo nã o tratará a exceçã o.)
Quando uma exceçã o foi atribuída usando as target, ela é limpa no final da clá usula except. É como se
except E as N:
foo
except E as N:
try:
foo
finally:
del N
Isso significa que a exceçã o deve ser atribuída a um nome diferente para poder referenciá -la apó s a clá usula except.
As exceçõ es sã o limpas porque, com o traceback (situaçã o da pilha de execuçã o) anexado a elas, elas formam um
ciclo de referê ncia com o quadro de pilha, mantendo todos os locais nesse quadro vivos até que ocorra a pró xima
coleta de lixo.
Antes de um conjunto de clá usulas except ser executado, a exceçã o é armazenada no mó dulo sys, onde pode ser
acessada de dentro do corpo da clá usula except chamando [Link](). Ao sair de um manipulador de
exceçõ es, a exceçã o armazenada no mó dulo sys é redefinida para seu valor anterior:
>>> print([Link]())
None
>>> try:
... raise TypeError
... except:
... print(repr([Link]()))
... try:
... raise ValueError
... except:
... print(repr([Link]()))
... print(repr([Link]()))
...
TypeError()
ValueError()
TypeError()
>>> print([Link]())
None
>>> try:
... raise ExceptionGroup("eg",
... [ValueError(1), TypeError(2), OSError(3), OSError(4)])
... except* TypeError as e:
(continua na pró xima pá gina)
Quaisquer exceçõ es restantes que nã o foram manipuladas por nenhuma clá usula except* sã o levantadas novamente
no final, junto com todas as exceçõ es que foram levantadas de dentro das clá usulas except*. Se esta lista contiver
mais de uma exceçã o para levantar novamente, elas serã o combinadas em um grupo de exceçõ es.
Se a exceçã o levantada nã o for um grupo de exceçõ es e seu tipo corresponder a uma das clá usulas except*, ela será
capturada e encapsulada por um grupo de exceçõ es com uma string de mensagem vazia.
>>> try:
... raise BlockingIOError
... except* BlockingIOError as e:
... print(repr(e))
...
ExceptionGroup('', (BlockingIOError()))
Uma clá usula except* deve ter uma expressã o correspondente; nã o pode ser except*:. Alé m disso, essa expressã o
nã o pode conter tipos de grupo de exceçã o, porque isso teria semâ ntica ambígua.
Nã o é possível misturar except e except* no mesmo try . break, continue e return nã o pode aparecer em
uma clá usula except*.
As informaçõ es de exceçã o nã o estã o disponíveis para o programa durante a execuçã o da clá usula finally.
Quando uma instruçã o return, break ou continue é executada no conjunto try de uma instruçã o
try…finally, a clá usula finally també m é executada “na saída”.
O valor de retorno de uma funçã o é determinado pela ú ltima instruçã o return executada. Como a clá usula finally
sempre é executada, uma instruçã o return executada na clá usula finally sempre será a ú ltima executada:
Alterado na versã o 3.8: Antes do Python 3.8, uma instruçã o continue era ilegal na clá usula finally devido a um
problema com a implementaçã o.
with_stmt ::= "with" ( "(" with_stmt_contents ","? ")" | with_stmt_contents ) ":" sui
with_stmt_contents ::= with_item ("," with_item)*
with_item ::= expression ["as" target]
® Nota
A instruçã o with garante que se o mé todo __enter__() retornar sem um erro, entã o __exit__()
sempre será chamado. Assim, se ocorrer um erro durante a atribuiçã o à lista de alvos, ele será tratado da
mesma forma que um erro ocorrendo dentro do conjunto seria. Veja a etapa 7 abaixo.
6. O conjunto é executado.
7. O mé todo __exit__() do gerenciador de contexto é invocado. Se uma exceçã o fez com que o conjunto fosse
encerrado, seu tipo, valor e traceback sã o passados como argumentos para __exit__(). Caso contrá rio, trê s
argumentos None sã o fornecidos.
Se o conjunto foi encerrado devido a uma exceçã o, e o valor de retorno do mé todo __exit__() foi falso, a
exceçã o é levantada novamente. Se o valor de retorno era verdadeiro, a exceçã o é suprimida, e a execuçã o
continua com a instruçã o apó s a instruçã o with.
Se o conjunto foi encerrado por qualquer motivo diferente de uma exceçã o, o valor de retorno de __exit__()
é ignorado e a execuçã o prossegue no local normal para o tipo de saída que foi realizada.
O seguinte có digo:
é semanticamente equivalente a:
manager = (EXPRESSION)
enter = type(manager).__enter__
exit = type(manager).__exit__
value = enter(manager)
hit_except = False
try:
TARGET = value
SUITE
except:
hit_except = True
if not exit(manager, *sys.exc_info()):
raise
finally:
if not hit_except:
exit(manager, None, None, None)
Com mais de um item, os gerenciadores de contexto sã o processados como se vá rias instruçõ es with estivessem
aninhadas:
é semanticamente equivalente a:
with A() as a:
with B() as b:
SUITE
Você també m pode escrever gerenciadores de contexto multi-item em vá rias linhas se os itens estiverem entre pa-
rê nteses. Por exemplo:
with (
A() as a,
B() as b,
):
SUITE
µ Ver também
® Nota
Esta seçã o usa aspas simples para denotar palavras reservadas contextuais.
A correspondê ncia de padrõ es aceita um padrã o como entrada (seguindo case) e um valor de sujeito (seguindo
match). O padrã o (que pode conter subpadrõ es) é correspondido ao valor de assunto. Os resultados sã o:
• Um sucesso ou falha de correspondê ncia (també m chamado de sucesso ou falha de padrã o).
• Possível vinculaçã o de valores correspondentes a um nome. Os pré -requisitos para isso sã o discutidos mais
adiante.
As palavras reservadas match e case sã o palavras reservadas contextuais.
µ Ver também
® Nota
Durante correspondê ncias de padrõ es com falha, alguns subpadrõ es podem ter sucesso. Nã o confie em
vinculaçõ es sendo feitas para uma correspondê ncia com falha. Por outro lado, nã o confie em variá veis
permanecendo inalteradas apó s uma correspondê ncia com falha. O comportamento exato depende da
implementaçã o e pode variar. Esta é uma decisã o intencional feita para permitir que diferentes implemen-
taçõ es adicionem otimizaçõ es.
3. Se o padrã o for bem-sucedido, o guard correspondente (se presente) é avaliado. Neste caso, todas as vincula-
çõ es de nome sã o garantidas como tendo acontecido.
• Se o guard for avaliado como verdadeiro ou estiver ausente, o block dentro de case_block será exe-
cutado.
• Caso contrá rio, o pró ximo case_block será tentado conforme descrito acima.
• Se nã o houver mais blocos de caso, a instruçã o match será concluída.
® Nota
Os usuá rios geralmente nunca devem confiar em um padrã o sendo avaliado. Dependendo da implementaçã o, o
interpretador pode armazenar valores em cache ou usar outras otimizaçõ es que pulam avaliaçõ es repetidas.
Neste caso, if flag é um guard. Leia mais sobre isso na pró xima seçã o.
8.6.2 Guards
8.6.4 Padrões
® Nota
Esta seçã o usa notaçõ es de gramá tica para alé m do padrã o de EBNF:
• a notaçã o [Link]+ é uma abreviaçã o para RULE (SEP RULE)*
• a notaçã o !RULE é uma abreviaçã o para uma asserçã o de negaçã o antecipada.
The descriptions below will include a description “in simple terms” of what a pattern does for illustration purposes
(credits to Raymond Hettinger for a document that inspired most of the descriptions). Note that these descriptions
are purely for illustration purposes and may not reflect the underlying implementation. Furthermore, they do not
cover all valid forms.
OR Patterns
An OR pattern is two or more patterns separated by vertical bars |. Syntax:
Only the final subpattern may be irrefutable, and each subpattern must bind the same set of names to avoid ambiguity.
An OR pattern matches each of its subpatterns in turn to the subject value, until one succeeds. The OR pattern is
then considered successful. Otherwise, if none of the subpatterns succeed, the OR pattern fails.
In simple terms, P1 | P2 | ... will try to match P1, if it fails it will try to match P2, succeeding immediately if
any succeeds, failing otherwise.
AS Patterns
An AS pattern matches an OR pattern on the left of the as keyword against a subject. Syntax:
If the OR pattern fails, the AS pattern fails. Otherwise, the AS pattern binds the subject to the name on the right of
the as keyword and succeeds. capture_pattern cannot be a _.
In simple terms P as NAME will match with P, and on success it will set NAME = <subject>.
Literal Patterns
A literal pattern corresponds to most literals in Python. Syntax:
The rule strings and the token NUMBER are defined in the standard Python grammar. Triple-quoted strings are
supported. Raw strings and byte strings are supported. Literais de strings formatadas are not supported.
The forms signed_number '+' NUMBER and signed_number '-' NUMBER are for expressing complex num-
bers; they require a real number on the left and an imaginary number on the right. E.g. 3 + 4j.
In simple terms, LITERAL will succeed only if <subject> == LITERAL. For the singletons None, True and
False, the is operator is used.
Capture Patterns
A capture pattern binds the subject value to a name. Syntax:
A single underscore _ is not a capture pattern (this is what !'_' expresses). It is instead treated as a
wildcard_pattern.
In a given pattern, a given name can only be bound once. E.g. case x, x: ... is invalid while case [x] | x:
... is allowed.
Capture patterns always succeed. The binding follows scoping rules established by the assignment expression operator
in PEP 572; the name becomes a local variable in the closest containing function scope unless there’s an applicable
global or nonlocal statement.
In simple terms NAME will always succeed and it will set NAME = <subject>.
Wildcard Patterns
A wildcard pattern always succeeds (matches anything) and binds no name. Syntax:
_ is a soft keyword within any pattern, but only within patterns. It is an identifier, as usual, even within match subject
expressions, guards, and case blocks.
In simple terms, _ will always succeed.
Value Patterns
A value pattern represents a named value in Python. Syntax:
The dotted name in the pattern is looked up using standard Python name resolution rules. The pattern succeeds if the
value found compares equal to the subject value (using the == equality operator).
In simple terms NAME1.NAME2 will succeed only if <subject> == NAME1.NAME2
® Nota
If the same value occurs multiple times in the same match statement, the interpreter may cache the first value
found and reuse it rather than repeat the same lookup. This cache is strictly tied to a given execution of a given
match statement.
Group Patterns
A group pattern allows users to add parentheses around patterns to emphasize the intended grouping. Otherwise, it
has no additional syntax. Syntax:
Sequence Patterns
A sequence pattern contains several subpatterns to be matched against sequence elements. The syntax is similar to
the unpacking of a list or tuple.
There is no difference if parentheses or square brackets are used for sequence patterns (i.e. (...) vs [...] ).
® Nota
A single pattern enclosed in parentheses without a trailing comma (e.g. (3 | 4)) is a group pattern. While a
single pattern enclosed in square brackets (e.g. [3 | 4]) is still a sequence pattern.
At most one star subpattern may be in a sequence pattern. The star subpattern may occur in any position. If no
star subpattern is present, the sequence pattern is a fixed-length sequence pattern; otherwise it is a variable-length
sequence pattern.
The following is the logical flow for matching a sequence pattern against a subject value:
1. If the subject value is not a sequence2 , the sequence pattern fails.
2 In pattern matching, a sequence is defined as one of the following:
• a class that inherits from [Link]
• a Python class that has been registered as [Link]
• a builtin class that has its (CPython) Py_TPFLAGS_SEQUENCE bit set
• a class that inherits from any of the above
The following standard library classes are sequences:
• [Link]
• [Link]
• list
• memoryview
• range
• tuple
2. If the subject value is an instance of str, bytes or bytearray the sequence pattern fails.
3. The subsequent steps depend on whether the sequence pattern is fixed or variable-length.
If the sequence pattern is fixed-length:
1. If the length of the subject sequence is not equal to the number of subpatterns, the sequence pattern fails
2. Subpatterns in the sequence pattern are matched to their corresponding items in the subject sequence
from left to right. Matching stops as soon as a subpattern fails. If all subpatterns succeed in matching
their corresponding item, the sequence pattern succeeds.
Otherwise, if the sequence pattern is variable-length:
1. If the length of the subject sequence is less than the number of non-star subpatterns, the sequence pattern
fails.
2. The leading non-star subpatterns are matched to their corresponding items as for fixed-length sequences.
3. If the previous step succeeds, the star subpattern matches a list formed of the remaining subject items,
excluding the remaining items corresponding to non-star subpatterns following the star subpattern.
4. Remaining non-star subpatterns are matched to their corresponding subject items, as for a fixed-length
sequence.
® Nota
The length of the subject sequence is obtained via len() (i.e. via the __len__() protocol). This length
may be cached by the interpreter in a similar manner as value patterns.
In simple terms [P1, P2, P3, … , P<N>] matches only if all the following happens:
• check <subject> is a sequence
• len(subject) == <N>
• P1 matches <subject>[0] (note that this match can also bind names)
• P2 matches <subject>[1] (note that this match can also bind names)
• … and so on for the corresponding pattern/element.
Mapping Patterns
A mapping pattern contains one or more key-value patterns. The syntax is similar to the construction of a dictionary.
Syntax:
At most one double star pattern may be in a mapping pattern. The double star pattern must be the last subpattern in
the mapping pattern.
Duplicate keys in mapping patterns are disallowed. Duplicate literal keys will raise a SyntaxError. Two keys that
otherwise have the same value will raise a ValueError at runtime.
® Nota
Subject values of type str, bytes, and bytearray do not match sequence patterns.
The following is the logical flow for matching a mapping pattern against a subject value:
1. If the subject value is not a mapping3 ,the mapping pattern fails.
2. If every key given in the mapping pattern is present in the subject mapping, and the pattern for each key matches
the corresponding item of the subject mapping, the mapping pattern succeeds.
3. If duplicate keys are detected in the mapping pattern, the pattern is considered invalid. A SyntaxError is
raised for duplicate literal values; or a ValueError for named keys of the same value.
® Nota
Key-value pairs are matched using the two-argument form of the mapping subject’s get() method. Matched
key-value pairs must already be present in the mapping, and not created on-the-fly via __missing__() or
__getitem__().
In simple terms {KEY1: P1, KEY2: P2, ... } matches only if all the following happens:
• check <subject> is a mapping
• KEY1 in <subject>
• P1 matches <subject>[KEY1]
• … and so on for the corresponding KEY/pattern pair.
Class Patterns
A class pattern represents a class and its positional and keyword arguments (if any). Syntax:
• Else, the subpattern associated with the keyword pattern is matched against the subject’s attribute value.
If this fails, the class pattern fails; if this succeeds, the match proceeds to the next keyword.
II. If all keyword patterns succeed, the class pattern succeeds.
If any positional patterns are present, they are converted to keyword patterns using the __match_args__
attribute on the class name_or_attr before matching:
I. The equivalent of getattr(cls, "__match_args__", ()) is called.
• If this raises an exception, the exception bubbles up.
• If the returned value is not a tuple, the conversion fails and TypeError is raised.
• If there are more positional patterns than len(cls.__match_args__), TypeError is rai-
sed.
• Otherwise, positional pattern i is converted to a keyword pattern using __match_args__[i]
as the keyword. __match_args__[i] must be a string; if not TypeError is raised.
• If there are duplicate keywords, TypeError is raised.
µ Ver também
II. Once all positional patterns have been converted to keyword patterns,
the match proceeds as if there were only keyword patterns.
For the following built-in types the handling of positional subpatterns is different:
• bool
• bytearray
• bytes
• dict
• float
• frozenset
• int
• list
• set
• str
• tuple
These classes accept a single positional argument, and the pattern there is matched against the whole object
rather than an attribute. For example int(0|1) matches the value 0, but not the value 0.0.
In simple terms CLS(P1, attr=P2) matches only if the following happens:
• isinstance(<subject>, CLS)
• convert P1 to a keyword pattern using CLS.__match_args__
• For each keyword argument attr=P2:
– hasattr(<subject>, "attr")
– P2 matches <subject>.attr
• … and so on for the corresponding keyword argument/pattern pair.
µ Ver também
A function definition is an executable statement. Its execution binds the function name in the current local namespace
to a function object (a wrapper around the executable code for the function). This function object contains a reference
to the current global namespace as the global namespace to be used when the function is called.
The function definition does not execute the function body; this gets executed only when the function is called.4
A function definition may be wrapped by one or more decorator expressions. Decorator expressions are evaluated
when the function is defined, in the scope that contains the function definition. The result must be a callable, which
is invoked with the function object as the only argument. The returned value is bound to the function name instead
of the function object. Multiple decorators are applied in nested fashion. For example, the following code
@f1(arg)
@f2
def func(): pass
is roughly equivalent to
except that the original function is not temporarily bound to the name func.
Alterado na versã o 3.9: Functions may be decorated with any valid assignment_expression. Previously, the
grammar was much more restrictive; see PEP 614 for details.
A list of type parameters may be given in square brackets between the function’s name and the opening parenthesis for
its parameter list. This indicates to static type checkers that the function is generic. At runtime, the type parameters
can be retrieved from the function’s __type_params__ attribute. See Generic functions for more.
Alterado na versã o 3.12: Type parameter lists are new in Python 3.12.
4 A string literal appearing as the first statement in the function body is transformed into the function’s __doc__ attribute and therefore the
function’s docstring.
When one or more parameters have the form parameter = expression, the function is said to have “default parameter
values.” For a parameter with a default value, the corresponding argument may be omitted from a call, in which case
the parameter’s default value is substituted. If a parameter has a default value, all following parameters up until the
“*” must also have a default value — this is a syntactic restriction that is not expressed by the grammar.
Default parameter values are evaluated from left to right when the function definition is executed. This means
that the expression is evaluated once, when the function is defined, and that the same “pre-computed” value is used
for each call. This is especially important to understand when a default parameter value is a mutable object, such as
a list or a dictionary: if the function modifies the object (e.g. by appending an item to a list), the default parameter
value is in effect modified. This is generally not what was intended. A way around this is to use None as the default,
and explicitly test for it in the body of the function, e.g.:
def whats_on_the_telly(penguin=None):
if penguin is None:
penguin = []
[Link]("property of the zoo")
return penguin
Function call semantics are described in more detail in section Chamadas. A function call always assigns values to
all parameters mentioned in the parameter list, either from positional arguments, from keyword arguments, or from
default values. If the form “*identifier” is present, it is initialized to a tuple receiving any excess positional
parameters, defaulting to the empty tuple. If the form “**identifier” is present, it is initialized to a new ordered
mapping receiving any excess keyword arguments, defaulting to a new empty mapping of the same type. Parame-
ters after “*” or “*identifier” are keyword-only parameters and may only be passed by keyword arguments.
Parameters before “/” are positional-only parameters and may only be passed by positional arguments.
Alterado na versã o 3.8: The / function parameter syntax may be used to indicate positional-only parameters. See
PEP 570 for details.
Parameters may have an annotation of the form “: expression” following the parameter name. Any parameter
may have an annotation, even those of the form *identifier or **identifier. (As a special case, parameters
of the form *identifier may have an annotation “: *expression”.) Functions may have “return” annotation
of the form “-> expression” after the parameter list. These annotations can be any valid Python expression.
The presence of annotations does not change the semantics of a function. The annotation values are available as
values of a dictionary keyed by the parameters’ names in the __annotations__ attribute of the function object. If
the annotations import from __future__ is used, annotations are preserved as strings at runtime which enables
postponed evaluation. Otherwise, they are evaluated when the function definition is executed. In this case annotations
may be evaluated in a different order than they appear in the source code.
Alterado na versã o 3.11: Parameters of the form “*identifier” may have an annotation “: *expression”. See
PEP 646.
It is also possible to create anonymous functions (functions not bound to a name), for immediate use in expressions.
This uses lambda expressions, described in section Lambdas. Note that the lambda expression is merely a shorthand
for a simplified function definition; a function defined in a “def ” statement can be passed around or assigned to
another name just like a function defined by a lambda expression. The “def” form is actually more powerful since it
allows the execution of multiple statements and annotations.
Programmer’s note: Functions are first-class objects. A “def” statement executed inside a function definition
defines a local function that can be returned or passed around. Free variables used in the nested function can access
the local variables of the function containing the def. See section Nomeação e ligação for details.
µ Ver também
A class definition is an executable statement. The inheritance list usually gives a list of base classes (see Metaclasses
for more advanced uses), so each item in the list should evaluate to a class object which allows subclassing. Classes
without an inheritance list inherit, by default, from the base class object; hence,
class Foo:
pass
é equivalente a
class Foo(object):
pass
The class’s suite is then executed in a new execution frame (see Nomeação e ligação), using a newly created local
namespace and the original global namespace. (Usually, the suite contains mostly function definitions.) When the
class’s suite finishes execution, its execution frame is discarded but its local namespace is saved.5 A class object is
then created using the inheritance list for the base classes and the saved local namespace for the attribute dictionary.
The class name is bound to this class object in the original local namespace.
The order in which attributes are defined in the class body is preserved in the new class’s __dict__. Note that this
is reliable only right after the class is created and only for classes that were defined using the definition syntax.
Class creation can be customized heavily using metaclasses.
Classes can also be decorated: just like when decorating functions,
@f1(arg)
@f2
class Foo: pass
is roughly equivalent to
The evaluation rules for the decorator expressions are the same as for function decorators. The result is then bound
to the class name.
Alterado na versã o 3.9: Classes may be decorated with any valid assignment_expression. Previously, the
grammar was much more restrictive; see PEP 614 for details.
5 A string literal appearing as the first statement in the class body is transformed into the namespace’s __doc__ item and therefore the class’s
docstring.
A list of type parameters may be given in square brackets immediately after the class’s name. This indicates to
static type checkers that the class is generic. At runtime, the type parameters can be retrieved from the class’s
__type_params__ attribute. See Generic classes for more.
Alterado na versã o 3.12: Type parameter lists are new in Python 3.12.
Programmer’s note: Variables defined in the class definition are class attributes; they are shared by instances. Ins-
tance attributes can be set in a method with [Link] = value. Both class and instance attributes are accessible
through the notation “[Link]”, and an instance attribute hides a class attribute with the same name when ac-
cessed in this way. Class attributes can be used as defaults for instance attributes, but using mutable values there can
lead to unexpected results. Descriptors can be used to create instance variables with different implementation details.
µ Ver também
8.9 Corrotinas
Adicionado na versã o 3.5.
It is a SyntaxError to use a yield from expression inside the body of a coroutine function.
An example of a coroutine function:
Alterado na versã o 3.7: await and async are now keywords; previously they were only treated as such inside the
body of a coroutine function.
iter = (ITER)
iter = type(iter).__aiter__(iter)
running = True
while running:
try:
TARGET = await type(iter).__anext__(iter)
except StopAsyncIteration:
running = False
else:
SUITE
else:
SUITE2
é semanticamente equivalente a:
manager = (EXPRESSION)
aenter = type(manager).__aenter__
aexit = type(manager).__aexit__
value = await aenter(manager)
hit_except = False
try:
TARGET = value
SUITE
except:
hit_except = True
if not await aexit(manager, *sys.exc_info()):
raise
finally:
if not hit_except:
await aexit(manager, None, None, None)
µ Ver também
Functions (including coroutines), classes and type aliases may contain a type parameter list:
class Bag[T]:
def __iter__(self) -> Iterator[T]:
...
Semantically, this indicates that the function, class, or type alias is generic over a type variable. This information is
primarily used by static type checkers, and at runtime, generic objects behave much like their non-generic counter-
parts.
Type parameters are declared in square brackets ([]) immediately after the name of the function, class, or type alias.
The type parameters are accessible within the scope of the generic object, but not elsewhere. Thus, after a declaration
def func[T](): pass, the name T is not available in the module scope. Below, the semantics of generic objects
are described with more precision. The scope of type parameters is modeled with a special function (technically, an
annotation scope) that wraps the creation of the generic object.
Generic functions, classes, and type aliases have a __type_params__ attribute listing their type parameters.
Type parameters come in three kinds:
• [Link], introduced by a plain name (e.g., T). Semantically, this represents a single type to a type
checker.
• [Link], introduced by a name prefixed with a single asterisk (e.g., *Ts). Semantically, this
stands for a tuple of any number of types.
• [Link], introduced by a name prefixed with two asterisks (e.g., **P). Semantically, this stands
for the parameters of a callable.
[Link] declarations can define bounds and constraints with a colon (:) followed by an expression. A
single expression after the colon indicates a bound (e.g. T: int). Semantically, this means that the typing.
TypeVar can only represent types that are a subtype of this bound. A parenthesized tuple of expressions after the
colon indicates a set of constraints (e.g. T: (str, bytes)). Each member of the tuple should be a type (again,
this is not enforced at runtime). Constrained type variables can only take on one of the types in the list of constraints.
For [Link] declared using the type parameter list syntax, the bound and constraints are not evaluated
when the generic object is created, but only when the value is explicitly accessed through the attributes __bound__
and __constraints__. To accomplish this, the bounds or constraints are evaluated in a separate annotation scope.
[Link] and [Link] cannot have bounds or constraints.
All three flavors of type parameters can also have a default value, which is used when the type parameter is not
explicitly provided. This is added by appending a single equals sign (=) followed by an expression. Like the bounds
and constraints of type variables, the default value is not evaluated when the object is created, but only when the type
parameter’s __default__ attribute is accessed. To this end, the default value is evaluated in a separate annotation
scope. If no default value is specified for a type parameter, the __default__ attribute is set to the special sentinel
object [Link].
The following example indicates the full set of allowed type parameter declarations:
def overly_generic[
SimpleTypeVar,
TypeVarWithDefault = int,
TypeVarWithBound: int,
TypeVarWithConstraints: (str, bytes),
*SimpleTypeVarTuple = (int, float),
**SimpleParamSpec = (str, bytearray),
](
a: SimpleTypeVar,
b: TypeVarWithDefault,
c: TypeVarWithBound,
d: Callable[SimpleParamSpec, TypeVarWithConstraints],
*e: SimpleTypeVarTuple,
): ...
annotation-def TYPE_PARAMS_OF_func():
T = [Link]("T")
def func(arg: T): ...
func.__type_params__ = (T,)
return func
func = TYPE_PARAMS_OF_func()
Here annotation-def indicates an annotation scope, which is not actually bound to any name at runtime. (One
other liberty is taken in the translation: the syntax does not go through attribute access on the typing module, but
creates an instance of [Link] directly.)
The annotations of generic functions are evaluated within the annotation scope used for declaring the type parameters,
but the function’s defaults and decorators are not.
The following example illustrates the scoping rules for these cases, as well as for additional flavors of type parameters:
@decorator
def func[T: int, *Ts, **P](*args: *Ts, arg: Callable[P, T] = some_default):
...
Except for the lazy evaluation of the TypeVar bound, this is equivalent to:
DEFAULT_OF_arg = some_default
annotation-def TYPE_PARAMS_OF_func():
annotation-def BOUND_OF_T():
return int
# In reality, BOUND_OF_T() is evaluated only on demand.
T = [Link]("T", bound=BOUND_OF_T())
Ts = [Link]("Ts")
P = [Link]("P")
The capitalized names like DEFAULT_OF_arg are not actually bound at runtime.
annotation-def TYPE_PARAMS_OF_Bag():
T = [Link]("T")
class Bag([Link][T]):
__type_params__ = (T,)
...
return Bag
Bag = TYPE_PARAMS_OF_Bag()
Here again annotation-def (not a real keyword) indicates an annotation scope, and the name
TYPE_PARAMS_OF_Bag is not actually bound at runtime.
Generic classes implicitly inherit from [Link]. The base classes and keyword arguments of generic
classes are evaluated within the type scope for the type parameters, and decorators are evaluated outside that scope.
This is illustrated by this example:
@decorator
class Bag(Base[T], arg=T): ...
Isso equivale a:
annotation-def TYPE_PARAMS_OF_Bag():
T = [Link]("T")
class Bag(Base[T], [Link][T], arg=T):
__type_params__ = (T,)
...
return Bag
Bag = decorator(TYPE_PARAMS_OF_Bag())
Except for the lazy evaluation of the value, this is equivalent to:
annotation-def TYPE_PARAMS_OF_ListOrSet():
T = [Link]("T")
annotation-def VALUE_OF_ListOrSet():
return list[T] | set[T]
# In reality, the value is lazily evaluated
return [Link]("ListOrSet", VALUE_OF_ListOrSet(), type_params=(T,
,→))
ListOrSet = TYPE_PARAMS_OF_ListOrSet()
Here, annotation-def (not a real keyword) indicates an annotation scope. The capitalized names like
TYPE_PARAMS_OF_ListOrSet are not actually bound at runtime.
O interpretador Python pode receber suas entradas de uma quantidade de fontes: de um script passado a ele como
entrada padrã o ou como um argumento do programa, digitado interativamente, de um arquivo fonte de um mó dulo,
etc. Este capítulo mostra a sintaxe usada nesses casos.
139
The Python Language Reference, Release 3.13.0
Note que uma instruçã o composta (de alto-nível) deve ser seguida por uma linha em branco no modo interativo; isso
é necessá rio para ajudar o analisador sintá tico a detectar o fim da entrada.
Esta é a gramá tica completa do Python, derivada diretamente da gramá tica usada para gerar o analisador sintá tico
de CPython (consulte Grammar/[Link]). A versã o aqui omite detalhes relacionados à geraçã o de có digo e
recuperaçã o de erros.
A notaçã o é uma mistura de EBNF e GASE (em inglê s, PEG). Em particular, & seguido por um símbolo, token
ou grupo entre parê nteses indica um “olhar a frente” positivo (ou seja, é necessá rio para corresponder, mas nã o
consumido), enquanto ! indica um “olhar a frente” negativo (ou seja, é necessá rio não combinar). Usamos o separador
| para significar a “escolha ordenada” do GASE (escrito como / nas gramá ticas GASE tradicionais). Veja PEP 617
para mais detalhes sobre a sintaxe da gramá tica.
141
The Python Language Reference, Release 3.13.0
# STARTING RULES
# ==============
# GENERAL STATEMENTS
# ==================
statements: statement+
statement_newline:
| compound_stmt NEWLINE
| simple_stmts
| NEWLINE
| ENDMARKER
(continua na pró xima pá gina)
simple_stmts:
| simple_stmt !';' NEWLINE # Not needed, there for speedup
| ';'.simple_stmt+ [';'] NEWLINE
compound_stmt:
| function_def
| if_stmt
| class_def
| with_stmt
| for_stmt
| try_stmt
| while_stmt
| match_stmt
# SIMPLE STATEMENTS
# =================
# NOTE: annotated_rhs may start with 'yield'; yield_expr must start with 'yield'
assignment:
| NAME ':' expression ['=' annotated_rhs ]
| ('(' single_target ')'
| single_subscript_attribute_target) ':' expression ['=' annotated_rhs ]
| (star_targets '=' )+ (yield_expr | star_expressions) !'=' [TYPE_COMMENT]
| single_target augassign ~ (yield_expr | star_expressions)
augassign:
| '+='
| '-='
| '*='
| '@='
| '/='
| '%='
| '&='
| '|='
| '^='
(continua na pró xima pá gina)
143
The Python Language Reference, Release 3.13.0
return_stmt:
| 'return' [star_expressions]
raise_stmt:
| 'raise' expression ['from' expression ]
| 'raise'
del_stmt:
| 'del' del_targets &(';' | NEWLINE)
yield_stmt: yield_expr
import_stmt:
| import_name
| import_from
# Import statements
# -----------------
# COMPOUND STATEMENTS
# ===================
# Common elements
# ---------------
(continua na pró xima pá gina)
block:
| NEWLINE INDENT statements DEDENT
| simple_stmts
# Class definitions
# -----------------
class_def:
| decorators class_def_raw
| class_def_raw
class_def_raw:
| 'class' NAME [type_params] ['(' [arguments] ')' ] ':' block
# Function definitions
# --------------------
function_def:
| decorators function_def_raw
| function_def_raw
function_def_raw:
| 'def' NAME [type_params] '(' [params] ')' ['->' expression ] ':' [func_type_
,→comment] block
| 'async' 'def' NAME [type_params] '(' [params] ')' ['->' expression ] ':'␣
,→[func_type_comment] block
# Function parameters
# -------------------
params:
| parameters
parameters:
| slash_no_default param_no_default* param_with_default* [star_etc]
| slash_with_default param_with_default* [star_etc]
| param_no_default+ param_with_default* [star_etc]
| param_with_default+ [star_etc]
| star_etc
slash_no_default:
| param_no_default+ '/' ','
| param_no_default+ '/' &')'
slash_with_default:
| param_no_default* param_with_default+ '/' ','
| param_no_default* param_with_default+ '/' &')'
star_etc:
| '*' param_no_default param_maybe_default* [kwds]
| '*' param_no_default_star_annotation param_maybe_default* [kwds]
(continua na pró xima pá gina)
145
The Python Language Reference, Release 3.13.0
kwds:
| '**' param_no_default
param_no_default:
| param ',' TYPE_COMMENT?
| param TYPE_COMMENT? &')'
param_no_default_star_annotation:
| param_star_annotation ',' TYPE_COMMENT?
| param_star_annotation TYPE_COMMENT? &')'
param_with_default:
| param default ',' TYPE_COMMENT?
| param default TYPE_COMMENT? &')'
param_maybe_default:
| param default? ',' TYPE_COMMENT?
| param default? TYPE_COMMENT? &')'
param: NAME annotation?
param_star_annotation: NAME star_annotation
annotation: ':' expression
star_annotation: ':' star_expression
default: '=' expression | invalid_default
# If statement
# ------------
if_stmt:
| 'if' named_expression ':' block elif_stmt
| 'if' named_expression ':' block [else_block]
elif_stmt:
| 'elif' named_expression ':' block elif_stmt
| 'elif' named_expression ':' block [else_block]
else_block:
| 'else' ':' block
# While statement
# ---------------
while_stmt:
| 'while' named_expression ':' block [else_block]
# For statement
(continua na pró xima pá gina)
for_stmt:
| 'for' star_targets 'in' ~ star_expressions ':' [TYPE_COMMENT] block [else_
,→block]
# With statement
# --------------
with_stmt:
| 'with' '(' ','.with_item+ ','? ')' ':' [TYPE_COMMENT] block
| 'with' ','.with_item+ ':' [TYPE_COMMENT] block
| 'async' 'with' '(' ','.with_item+ ','? ')' ':' block
| 'async' 'with' ','.with_item+ ':' [TYPE_COMMENT] block
with_item:
| expression 'as' star_target &(',' | ')' | ':')
| expression
# Try statement
# -------------
try_stmt:
| 'try' ':' block finally_block
| 'try' ':' block except_block+ [else_block] [finally_block]
| 'try' ':' block except_star_block+ [else_block] [finally_block]
# Except statement
# ----------------
except_block:
| 'except' expression ['as' NAME ] ':' block
| 'except' ':' block
except_star_block:
| 'except' '*' expression ['as' NAME ] ':' block
finally_block:
| 'finally' ':' block
# Match statement
# ---------------
match_stmt:
| "match" subject_expr ':' NEWLINE INDENT case_block+ DEDENT
subject_expr:
| star_named_expression ',' star_named_expressions?
| named_expression
case_block:
| "case" patterns guard? ':' block
147
The Python Language Reference, Release 3.13.0
pattern:
| as_pattern
| or_pattern
as_pattern:
| or_pattern 'as' pattern_capture_target
or_pattern:
| '|'.closed_pattern+
closed_pattern:
| literal_pattern
| capture_pattern
| wildcard_pattern
| value_pattern
| group_pattern
| sequence_pattern
| mapping_pattern
| class_pattern
complex_number:
| signed_real_number '+' imaginary_number
| signed_real_number '-' imaginary_number
signed_number:
| NUMBER
| '-' NUMBER
signed_real_number:
| real_number
| '-' real_number
real_number:
| NUMBER
(continua na pró xima pá gina)
imaginary_number:
| NUMBER
capture_pattern:
| pattern_capture_target
pattern_capture_target:
| !"_" NAME !('.' | '(' | '=')
wildcard_pattern:
| "_"
value_pattern:
| attr !('.' | '(' | '=')
attr:
| name_or_attr '.' NAME
name_or_attr:
| attr
| NAME
group_pattern:
| '(' pattern ')'
sequence_pattern:
| '[' maybe_sequence_pattern? ']'
| '(' open_sequence_pattern? ')'
open_sequence_pattern:
| maybe_star_pattern ',' maybe_sequence_pattern?
maybe_sequence_pattern:
| ','.maybe_star_pattern+ ','?
maybe_star_pattern:
| star_pattern
| pattern
star_pattern:
| '*' pattern_capture_target
| '*' wildcard_pattern
mapping_pattern:
| '{' '}'
| '{' double_star_pattern ','? '}'
| '{' items_pattern ',' double_star_pattern ','? '}'
| '{' items_pattern ','? '}'
items_pattern:
| ','.key_value_pattern+
key_value_pattern:
| (literal_expr | attr) ':' pattern
149
The Python Language Reference, Release 3.13.0
class_pattern:
| name_or_attr '(' ')'
| name_or_attr '(' positional_patterns ','? ')'
| name_or_attr '(' keyword_patterns ','? ')'
| name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'
positional_patterns:
| ','.pattern+
keyword_patterns:
| ','.keyword_pattern+
keyword_pattern:
| NAME '=' pattern
# Type statement
# ---------------
type_alias:
| "type" NAME [type_params] '=' expression
type_params:
| invalid_type_params
| '[' type_param_seq ']'
type_param:
| NAME [type_param_bound] [type_param_default]
| '*' NAME [type_param_starred_default]
| '**' NAME [type_param_default]
# EXPRESSIONS
# -----------
expressions:
| expression (',' expression )+ [',']
| expression ','
| expression
expression:
| disjunction 'if' disjunction 'else' expression
| disjunction
| lambdef
yield_expr:
(continua na pró xima pá gina)
star_expressions:
| star_expression (',' star_expression )+ [',']
| star_expression ','
| star_expression
star_expression:
| '*' bitwise_or
| expression
star_named_expression:
| '*' bitwise_or
| named_expression
assignment_expression:
| NAME ':=' ~ expression
named_expression:
| assignment_expression
| expression !':='
disjunction:
| conjunction ('or' conjunction )+
| conjunction
conjunction:
| inversion ('and' inversion )+
| inversion
inversion:
| 'not' inversion
| comparison
# Comparison operators
# --------------------
comparison:
| bitwise_or compare_op_bitwise_or_pair+
| bitwise_or
compare_op_bitwise_or_pair:
| eq_bitwise_or
| noteq_bitwise_or
| lte_bitwise_or
| lt_bitwise_or
| gte_bitwise_or
| gt_bitwise_or
| notin_bitwise_or
| in_bitwise_or
| isnot_bitwise_or
| is_bitwise_or
151
The Python Language Reference, Release 3.13.0
# Bitwise operators
# -----------------
bitwise_or:
| bitwise_or '|' bitwise_xor
| bitwise_xor
bitwise_xor:
| bitwise_xor '^' bitwise_and
| bitwise_and
bitwise_and:
| bitwise_and '&' shift_expr
| shift_expr
shift_expr:
| shift_expr '<<' sum
| shift_expr '>>' sum
| sum
# Arithmetic operators
# --------------------
sum:
| sum '+' term
| sum '-' term
| term
term:
| term '*' factor
| term '/' factor
| term '//' factor
| term '%' factor
| term '@' factor
| factor
factor:
| '+' factor
| '-' factor
| '~' factor
| power
power:
| await_primary '**' factor
(continua na pró xima pá gina)
# Primary elements
# ----------------
await_primary:
| 'await' primary
| primary
primary:
| primary '.' NAME
| primary genexp
| primary '(' [arguments] ')'
| primary '[' slices ']'
| atom
slices:
| slice !','
| ','.(slice | starred_expression)+ [',']
slice:
| [expression] ':' [expression] [':' [expression] ]
| named_expression
atom:
| NAME
| 'True'
| 'False'
| 'None'
| strings
| NUMBER
| (tuple | group | genexp)
| (list | listcomp)
| (dict | set | dictcomp | setcomp)
| '...'
group:
| '(' (yield_expr | named_expression) ')'
# Lambda functions
# ----------------
lambdef:
| 'lambda' [lambda_params] ':' expression
lambda_params:
| lambda_parameters
153
The Python Language Reference, Release 3.13.0
lambda_slash_no_default:
| lambda_param_no_default+ '/' ','
| lambda_param_no_default+ '/' &':'
lambda_slash_with_default:
| lambda_param_no_default* lambda_param_with_default+ '/' ','
| lambda_param_no_default* lambda_param_with_default+ '/' &':'
lambda_star_etc:
| '*' lambda_param_no_default lambda_param_maybe_default* [lambda_kwds]
| '*' ',' lambda_param_maybe_default+ [lambda_kwds]
| lambda_kwds
lambda_kwds:
| '**' lambda_param_no_default
lambda_param_no_default:
| lambda_param ','
| lambda_param &':'
lambda_param_with_default:
| lambda_param default ','
| lambda_param default &':'
lambda_param_maybe_default:
| lambda_param default? ','
| lambda_param default? &':'
lambda_param: NAME
# LITERALS
# ========
fstring_middle:
| fstring_replacement_field
| FSTRING_MIDDLE
fstring_replacement_field:
| '{' annotated_rhs '='? [fstring_conversion] [fstring_full_format_spec] '}'
fstring_conversion:
| "!" NAME
fstring_full_format_spec:
| ':' fstring_format_spec*
fstring_format_spec:
| FSTRING_MIDDLE
| fstring_replacement_field
fstring:
| FSTRING_START fstring_middle* FSTRING_END
string: STRING
strings: (fstring|string)+
list:
(continua na pró xima pá gina)
tuple:
| '(' [star_named_expression ',' [star_named_expressions] ] ')'
# Dicts
# -----
dict:
| '{' [double_starred_kvpairs] '}'
double_starred_kvpair:
| '**' bitwise_or
| kvpair
for_if_clauses:
| for_if_clause+
for_if_clause:
| 'async' 'for' star_targets 'in' ~ disjunction ('if' disjunction )*
| 'for' star_targets 'in' ~ disjunction ('if' disjunction )*
listcomp:
| '[' named_expression for_if_clauses ']'
setcomp:
| '{' named_expression for_if_clauses '}'
genexp:
| '(' ( assignment_expression | expression !':=') for_if_clauses ')'
dictcomp:
| '{' kvpair for_if_clauses '}'
arguments:
| args [','] &')'
args:
| ','.(starred_expression | ( assignment_expression | expression !':=') !'=')+␣
,→[',' kwargs ]
| kwargs
kwargs:
| ','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+
(continua na pró xima pá gina)
155
The Python Language Reference, Release 3.13.0
starred_expression:
| '*' expression
kwarg_or_starred:
| NAME '=' expression
| starred_expression
kwarg_or_double_starred:
| NAME '=' expression
| '**' expression
# ASSIGNMENT TARGETS
# ==================
# Generic targets
# ---------------
star_targets_tuple_seq:
| star_target (',' star_target )+ [',']
| star_target ','
star_target:
| '*' (!'*' star_target)
| target_with_star_atom
target_with_star_atom:
| t_primary '.' NAME !t_lookahead
| t_primary '[' slices ']' !t_lookahead
| star_atom
star_atom:
| NAME
| '(' target_with_star_atom ')'
| '(' [star_targets_tuple_seq] ')'
| '[' [star_targets_list_seq] ']'
single_target:
| single_subscript_attribute_target
| NAME
| '(' single_target ')'
single_subscript_attribute_target:
| t_primary '.' NAME !t_lookahead
| t_primary '[' slices ']' !t_lookahead
t_primary:
(continua na pró xima pá gina)
del_target:
| t_primary '.' NAME !t_lookahead
| t_primary '[' slices ']' !t_lookahead
| del_t_atom
del_t_atom:
| NAME
| '(' del_target ')'
| '(' [del_targets] ')'
| '[' [del_targets] ']'
# TYPING ELEMENTS
# ---------------
func_type_comment:
| NEWLINE TYPE_COMMENT &(NEWLINE INDENT) # Must be followed by indented block
| TYPE_COMMENT
157
The Python Language Reference, Release 3.13.0
Glossário
>>>
O prompt padrã o do console interativo do Python. Normalmente visto em exemplos de có digo que podem ser
executados interativamente no interpretador.
...
Pode se referir a:
• O prompt padrã o do console interativo do Python ao inserir o có digo para um bloco de có digo recuado,
quando dentro de um par de delimitadores correspondentes esquerdo e direito (parê nteses, colchetes,
chaves ou aspas triplas) ou apó s especificar um decorador.
• A constante embutida Ellipsis.
classe base abstrata
Classes bases abstratas complementam tipagem pato, fornecendo uma maneira de definir interfaces quando ou-
tras té cnicas, como hasattr(), seriam desajeitadas ou sutilmente erradas (por exemplo, com métodos mági-
cos). CBAs introduzem subclasses virtuais, classes que nã o herdam de uma classe mas ainda sã o reconhecidas
por isinstance() e issubclass(); veja a documentaçã o do mó dulo abc. Python vem com muitas CBAs
embutidas para estruturas de dados (no mó dulo [Link]), nú meros (no mó dulo numbers), fluxos
(no mó dulo io), localizadores e carregadores de importaçã o (no mó dulo [Link]). Você pode criar
suas pró prias CBAs com o mó dulo abc.
anotação
Um ró tulo associado a uma variá vel, um atributo de classe ou um parâ metro de funçã o ou valor de retorno,
usado por convençã o como dica de tipo.
Anotaçõ es de variá veis locais nã o podem ser acessadas em tempo de execuçã o, mas anotaçõ es de variá veis
globais, atributos de classe e funçõ es sã o armazenadas no atributo especial __annotations__ de mó dulos,
classes e funçõ es, respectivamente.
Veja anotação de variável, anotação de função, PEP 484 e PEP 526, que descrevem esta funcionalidade.
Veja també m annotations-howto para as melhores prá ticas sobre como trabalhar com anotaçõ es.
argumento
Um valor passado para uma função (ou método) ao chamar a funçã o. Existem dois tipos de argumento:
• argumento nomeado: um argumento precedido por um identificador (por exemplo, name=) na chamada
de uma funçã o ou passada como um valor em um dicioná rio precedido por **. Por exemplo, 3 e 5 sã o
ambos argumentos nomeados na chamada da funçã o complex() a seguir:
159
The Python Language Reference, Release 3.13.0
complex(real=3, imag=5)
complex(**{'real': 3, 'imag': 5})
• argumento posicional: um argumento que nã o é um argumento nomeado. Argumentos posicionais po-
dem aparecer no início da lista de argumentos e/ou podem ser passados com elementos de um iterável
precedido por *. Por exemplo, 3 e 5 sã o ambos argumentos posicionais nas chamadas a seguir:
complex(3, 5)
complex(*(3, 5))
Argumentos sã o atribuídos à s variá veis locais nomeadas no corpo da funçã o. Veja a seçã o Chamadas para
as regras de atribuiçã o. Sintaticamente, qualquer expressã o pode ser usada para representar um argumento;
avaliada a expressã o, o valor é atribuído à variá vel local.
Veja també m o termo parâmetro no glossá rio, a pergunta no FAQ sobre a diferença entre argumentos e parâ -
metros e PEP 362.
gerenciador de contexto assíncrono
Um objeto que controla o ambiente visto numa instruçã o async with por meio da definiçã o dos mé todos
__aenter__() e __aexit__(). Introduzido pela PEP 492.
gerador assíncrono
Uma funçã o que retorna um iterador gerador assíncrono. É parecida com uma funçã o de corrotina definida
com async def exceto pelo fato de conter instruçõ es yield para produzir uma sé rie de valores que podem
ser usados em um laço async for.
Normalmente se refere a uma funçã o geradora assíncrona, mas pode se referir a um iterador gerador assín-
crono em alguns contextos. Em casos em que o significado nã o esteja claro, usar o termo completo evita a
ambiguidade.
Uma funçã o geradora assíncrona pode conter expressõ es await e també m as instruçõ es async for e async
with.
BDFL
Abreviaçã o da expressã o da língua inglesa “Benevolent Dictator for Life” (em portuguê s, “Ditador Benevolente
Vitalício”), referindo-se a Guido van Rossum, criador do Python.
arquivo binário
Um objeto arquivo capaz de ler e gravar em objetos bytes ou similar. Exemplos de arquivos biná rios sã o arquivos
abertos no modo biná rio ('rb', 'wb' ou 'rb+'), [Link], [Link], e instâ ncias
de [Link] e [Link].
Veja també m arquivo texto para um objeto arquivo capaz de ler e gravar em objetos str.
referência emprestada
Na API C do Python, uma referê ncia emprestada é uma referê ncia a um objeto que nã o é dona da referê ncia.
Ela se torna um ponteiro solto se o objeto for destruído. Por exemplo, uma coleta de lixo pode remover a
ú ltima referência forte para o objeto e assim destruí-lo.
Chamar Py_INCREF() na referência emprestada é recomendado para convertê -lo, internamente, em uma
referência forte, exceto quando o objeto nã o pode ser destruído antes do ú ltimo uso da referê ncia emprestada.
A funçã o Py_NewRef() pode ser usada para criar uma nova referência forte.
objeto byte ou similar
Um objeto com suporte ao o bufferobjects e que pode exportar um buffer C contíguo. Isso inclui todos os
objetos bytes, bytearray e [Link], alé m de muitos objetos memoryview comuns. Objetos byte
ou similar podem ser usados para vá rias operaçõ es que funcionam com dados biná rios; isso inclui compactaçã o,
salvamento em um arquivo biná rio e envio por um soquete.
Algumas operaçõ es precisam que os dados biná rios sejam mutá veis. A documentaçã o geralmente se refere
a eles como “objetos byte ou similar para leitura e escrita”. Exemplos de objetos de buffer mutá vel incluem
bytearray e um memoryview de um bytearray. Outras operaçõ es exigem que os dados biná rios sejam
armazenados em objetos imutá veis (“objetos byte ou similar para somente leitura”); exemplos disso incluem
bytes e a memoryview de um objeto bytes.
bytecode
O có digo-fonte Python é compilado para bytecode, a representaçã o interna de um programa em Python no
interpretador CPython. O bytecode també m é mantido em cache em arquivos .pyc e .pyo, de forma que
executar um mesmo arquivo é mais rá pido na segunda vez (a recompilaçã o dos fontes para bytecode nã o é
necessá ria). Esta “linguagem intermediá ria” é adequada para execuçã o em uma máquina virtual, que executa
o có digo de má quina correspondente para cada bytecode. Tenha em mente que nã o se espera que bytecodes
sejam executados entre má quinas virtuais Python diferentes, nem que se mantenham está veis entre versõ es de
Python.
Uma lista de instruçõ es bytecode pode ser encontrada na documentaçã o para o mó dulo dis.
chamável
Um chamá vel é um objeto que pode ser chamado, possivelmente com um conjunto de argumentos (veja ar-
gumento), com a seguinte sintaxe:
Uma função, e por extensã o um método, é um chamá vel. Uma instâ ncia de uma classe que implementa o
mé todo __call__() també m é um chamá vel.
função de retorno
També m conhecida como callback, é uma funçã o sub-rotina que é passada como um argumento a ser executado
em algum ponto no futuro.
classe
Um modelo para criaçã o de objetos definidos pelo usuá rio. Definiçõ es de classe normalmente conté m defini-
çõ es de mé todos que operam sobre instâ ncias da classe.
variável de classe
Uma variá vel definida em uma classe e destinada a ser modificada apenas no nível da classe (ou seja, nã o em
uma instâ ncia da classe).
161
The Python Language Reference, Release 3.13.0
variável de clausura
Uma variável livre referenciada de um escopo aninhado que é definida em um escopo externo em vez de ser
resolvida em tempo de execuçã o a partir dos espaços de nomes embutido ou globais. Pode ser explicitamente
definida com a palavra reservada nonlocal para permitir acesso de gravaçã o, ou implicitamente definida se
a variá vel estiver sendo somente lida.
Por exemplo, na funçã o interna no có digo a seguir, tanto x quanto print sã o variáveis livres, mas somente
x é uma variável de clausura:
def externa():
x = 0
def interna():
nonlocal x
x += 1
print(x)
return interna
Devido ao atributo codeobject.co_freevars (que, apesar do nome, inclui apenas os nomes das variá veis
de clausura em vez de listar todas as variá veis livres referenciadas), o termo mais geral variável livre à s vezes
é usado mesmo quando o significado pretendido é se referir especificamente à s variá veis de clausura.
número complexo
Uma extensã o ao familiar sistema de nú meros reais em que todos os nú meros sã o expressos como uma soma
de uma parte real e uma parte imaginá ria. Nú meros imaginá rios sã o mú ltiplos reais da unidade imaginá ria
(a raiz quadrada de -1), normalmente escrita como i em matemá tica ou j em engenharia. O Python tem
suporte nativo para nú meros complexos, que sã o escritos com esta ú ltima notaçã o; a parte imaginá ria escrita
com um sufixo j, [Link]., 3+1j. Para ter acesso aos equivalentes para nú meros complexos do mó dulo math,
utilize cmath. O uso de nú meros complexos é uma funcionalidade matemá tica bastante avançada. Se você
nã o sabe se irá precisar deles, é quase certo que você pode ignorá -los sem problemas.
contexto
Este termo tem diferentes significados dependendo de onde e como ele é usado. Alguns significados comuns:
• O estado ou ambiente temporá rio estabelecido por um gerenciador de contexto por meio de uma instruçã o
with.
função de corrotina
Uma funçã o que retorna um objeto do tipo corrotina. Uma funçã o de corrotina pode ser definida com a instru-
çã o async def , e pode conter as palavras chaves await, async for, e async with. Isso foi introduzido
pela PEP 492.
CPython
A implementaçã o canô nica da linguagem de programaçã o Python, como disponibilizada pelo [Link].
O termo “CPython” é usado quando necessá rio distinguir esta implementaçã o de outras como Jython ou
IronPython.
contexto atual
O contexto (objeto [Link]) que é usado atualmente pelos objetos ContextVar para acessar
(obter ou definir) os valores de variáveis de contexto. Cada thread tem seu pró prio contexto atual. Frameworks
para executar tarefas assíncronas (veja asyncio) associam cada tarefa a um contexto que se torna o contexto
atual sempre que a tarefa inicia ou retoma a execuçã o.
decorador
Uma funçã o que retorna outra funçã o, geralmente aplicada como uma transformaçã o de funçã o usando a
sintaxe @wrapper. Exemplos comuns para decoradores sã o classmethod() e staticmethod().
A sintaxe do decorador é meramente um açú car sintá tico, as duas definiçõ es de funçõ es a seguir sã o semanti-
camente equivalentes:
def f(arg):
...
f = staticmethod(f)
@staticmethod
def f(arg):
...
O mesmo conceito existe para as classes, mas nã o é comumente utilizado. Veja a documentaçã o de definições
de função e definições de classe para obter mais informaçõ es sobre decoradores.
descritor
Qualquer objeto que define os mé todos __get__(), __set__() ou __delete__(). Quando um atributo
de classe é um descritor, seu comportamento de associaçã o especial é acionado no acesso a um atributo.
Normalmente, ao se utilizar a.b para se obter, definir ou excluir, um atributo dispara uma busca no objeto
chamado b no dicioná rio de classe de a, mas se b for um descritor, o respectivo mé todo descritor é chamado.
Compreender descritores é a chave para um profundo entendimento de Python pois eles sã o a base de muitas
funcionalidades incluindo funçõ es, mé todos, propriedades, mé todos de classe, mé todos está ticos e referê ncias
para superclasses.
Para obter mais informaçõ es sobre os mé todos dos descritores, veja: Implementando descritores ou o Guia de
Descritores.
dicionário
Um vetor associativo em que chaves arbitrá rias sã o mapeadas para valores. As chaves podem ser quaisquer
objetos que possuam os mé todos __hash__() e __eq__(). Isso é chamado de hash em Perl.
compreensão de dicionário
Uma maneira compacta de processar todos ou parte dos elementos de um iterá vel e retornar um dicioná rio com
os resultados. results = {n: n ** 2 for n in range(10)} gera um dicioná rio contendo a chave n
mapeada para o valor n ** 2. Veja Sintaxe de criação de listas, conjuntos e dicionários.
visão de dicionário
Os objetos retornados por [Link](), [Link]() e [Link]() sã o chamados de visõ es de
dicioná rio. Eles fornecem uma visã o dinâ mica das entradas do dicioná rio, o que significa que quando o di-
cioná rio é alterado, a visã o reflete essas alteraçõ es. Para forçar a visã o de dicioná rio a se tornar uma lista
completa use list(dictview). Veja dict-views.
docstring
Abreviatura de “documentation string” (string de documentaçã o). Uma string literal que aparece como pri-
163
The Python Language Reference, Release 3.13.0
meira expressã o numa classe, funçã o ou mó dulo. Ainda que sejam ignoradas quando a suíte é executada, é
reconhecida pelo compilador que a coloca no atributo __doc__ da classe, funçã o ou mó dulo que a encapsula.
Como ficam disponíveis por meio de introspecçã o, docstrings sã o o lugar canô nico para documentaçã o do
objeto.
tipagem pato
També m conhecida como duck-typing, é um estilo de programaçã o que nã o verifica o tipo do objeto para
determinar se ele possui a interface correta; em vez disso, o mé todo ou atributo é simplesmente chamado
ou utilizado (“Se se parece com um pato e grasna como um pato, entã o deve ser um pato.”) Enfatizando
interfaces ao invé s de tipos específicos, o có digo bem desenvolvido aprimora sua flexibilidade por permitir
substituiçã o polimó rfica. Tipagem pato evita necessidade de testes que usem type() ou isinstance().
(Note, poré m, que a tipagem pato pode ser complementada com o uso de classes base abstratas.) Ao invé s
disso, sã o normalmente empregados testes hasattr() ou programaçã o EAFP.
EAFP
Iniciais da expressã o em inglê s “easier to ask for forgiveness than permission” que significa “é mais fá cil pedir
perdã o que permissã o”. Este estilo de codificaçã o comum no Python presume a existê ncia de chaves ou atribu-
tos vá lidos e captura exceçõ es caso essa premissa se prove falsa. Este estilo limpo e rá pido se caracteriza pela
presença de vá rias instruçõ es try e except. A té cnica diverge do estilo LBYL, comum em outras linguagens
como C, por exemplo.
expressão
Uma parte da sintaxe que pode ser avaliada para algum valor. Em outras palavras, uma expressã o é a acumula-
çã o de elementos de expressã o como literais, nomes, atributos de acesso, operadores ou chamadas de funçõ es,
todos os quais retornam um valor. Em contraste com muitas outras linguagens, nem todas as construçõ es
de linguagem sã o expressõ es. També m existem instruções, as quais nã o podem ser usadas como expressõ es,
como, por exemplo, while. Atribuiçõ es també m sã o instruçõ es, nã o expressõ es.
módulo de extensão
Um mó dulo escrito em C ou C++, usando a API C do Python para interagir tanto com có digo de usuá rio
quanto do nú cleo.
f-string
Literais string prefixadas com 'f' ou 'F' sã o conhecidas como “f-strings” que é uma abreviaçã o de formatted
string literals. Veja també m PEP 498.
objeto arquivo
Um objeto que expõ e uma API orientada a arquivos (com mé todos tais como read() ou write()) para
um recurso subjacente. Dependendo da maneira como foi criado, um objeto arquivo pode mediar o acesso a
um arquivo real no disco ou outro tipo de dispositivo de armazenamento ou de comunicaçã o (por exemplo a
entrada/saída padrã o, buffers em memó ria, soquetes, pipes, etc.). Objetos arquivo també m sã o chamados de
objetos arquivo ou similares ou fluxos.
Atualmente há trê s categorias de objetos arquivo: arquivos binários brutos, arquivos binários em buffer e
arquivos textos. Suas interfaces estã o definidas no mó dulo io. A forma canô nica para criar um objeto arquivo
é usando a funçã o open().
objeto arquivo ou similar
Um sinô nimo do termo objeto arquivo.
tratador de erros e codificação do sistema de arquivos
Tratador de erros e codificaçã o usado pelo Python para decodificar bytes do sistema operacional e codificar
Unicode para o sistema operacional.
A codificaçã o do sistema de arquivos deve garantir a decodificaçã o bem-sucedida de todos os bytes abaixo
de 128. Se a codificaçã o do sistema de arquivos falhar em fornecer essa garantia, as funçõ es da API podem
levantar UnicodeError.
As funçõ es [Link]() e [Link]() podem ser usa-
das para obter o tratador de erros e codificaçã o do sistema de arquivos.
O tratador de erros e codificação do sistema de arquivos sã o configurados na inicializaçã o do Python pela funçã o
PyConfig_Read(): veja os membros filesystem_encoding e filesystem_errors do PyConfig.
localizador
Um objeto que tenta encontrar o carregador para um mó dulo que está sendo importado.
Existem dois tipos de localizador: localizadores de metacaminho para uso com sys.meta_path, e localiza-
dores de entrada de caminho para uso com sys.path_hooks.
Veja Localizadores e carregadores e importlib para muito mais detalhes.
divisão pelo piso
Divisã o matemá tica que arredonda para baixo para o inteiro mais pró ximo. O operador de divisã o pelo piso é
//. Por exemplo, a expressã o 11 // 4 retorna o valor 2 ao invé s de 2.75, que seria retornado pela divisã o
de ponto flutuante. Note que (-11) // 4 é -3 porque é -2.75 arredondado para baixo. Consulte a PEP
238.
threads livres
Um modelo de threads onde mú ltiplas threads podem simultaneamente executar bytecode Python no mesmo
interpretador. Isso está em contraste com a trava global do interpretador que permite apenas uma thread por
vez executar bytecode Python. Veja PEP 703.
variável livre
Formalmente, conforme definido no modelo de execução de linguagem, uma variá vel livre é qualquer variá vel
usada em um espaço de nomes que nã o seja uma variá vel local naquele espaço de nomes. Veja variável de
clausura para um exemplo. Pragmaticamente, devido ao nome do atributo codeobject.co_freevars, o
termo també m é usado algumas vezes como sinô nimo de variável de clausura.
função
Uma sé rie de instruçõ es que retorna algum valor para um chamador. També m pode ser passado zero ou mais
argumentos que podem ser usados na execuçã o do corpo. Veja també m parâmetro, método e a seçã o Definições
de função.
anotação de função
Uma anotação de um parâ metro de funçã o ou valor de retorno.
Anotaçõ es de funçã o sã o comumente usados por dicas de tipo: por exemplo, essa funçã o espera receber dois
argumentos int e també m é esperado que devolva um valor int:
coleta de lixo
També m conhecido como garbage collection, é o processo de liberar a memó ria quando ela nã o é mais utilizada.
Python executa a liberaçã o da memó ria atravé s da contagem de referê ncias e um coletor de lixo cíclico que é
capaz de detectar e interromper referê ncias cíclicas. O coletor de lixo pode ser controlado usando o mó dulo
gc.
gerador
Uma funçã o que retorna um iterador gerador. É parecida com uma funçã o normal, exceto pelo fato de conter
expressõ es yield para produzir uma sé rie de valores que podem ser usados em um laço “for” ou que podem
ser obtidos um de cada vez com a funçã o next().
165
The Python Language Reference, Release 3.13.0
Normalmente refere-se a uma funçã o geradora, mas pode referir-se a um iterador gerador em alguns contextos.
Em alguns casos onde o significado desejado nã o está claro, usar o termo completo evita ambiguidade.
iterador gerador
Um objeto criado por uma funçã o geradora.
Cada yield suspende temporariamente o processamento, memorizando o estado da execuçã o local (incluindo
variá veis locais e instruçõ es try pendentes). Quando o iterador gerador retorna, ele se recupera do ú ltimo ponto
onde estava (em contrapartida as funçõ es que iniciam uma nova execuçã o a cada vez que sã o invocadas).
expressão geradora
Uma expressão que retorna um iterador. Parece uma expressã o normal, seguido de uma clá usula for definindo
uma variá vel de laço, um intervalo, e uma clá usula if opcional. A expressã o combinada gera valores para uma
funçã o encapsuladora:
função genérica
Uma funçã o composta por vá rias funçõ es implementando a mesma operaçã o para diferentes tipos. Qual im-
plementaçã o deverá ser usada durante a execuçã o é determinada pelo algoritmo de despacho.
Veja també m a entrada despacho único no glossá rio, o decorador [Link](), e a PEP
443.
tipo genérico
Um tipo que pode ser parametrizado; tipicamente uma classe contêiner tal como list ou dict. Usado para
dicas de tipo e anotações.
Para mais detalhes, veja tipo apelido gené rico, PEP 483, PEP 484, PEP 585, e o mó dulo typing.
GIL
Veja trava global do interpretador.
trava global do interpretador
O mecanismo utilizado pelo interpretador CPython para garantir que apenas uma thread execute o bytecode
Python por vez. Isto simplifica a implementaçã o do CPython ao fazer com que o modelo de objetos (incluindo
tipos embutidos críticos como o dict) ganhem segurança implícita contra acesso concorrente. Travar todo o
interpretador facilita que o interpretador em si seja multitarefa, à s custas de muito do paralelismo já provido
por má quinas multiprocessador.
No entanto, alguns mó dulos de extensã o, tanto da biblioteca padrã o quanto de terceiros, sã o desenvolvidos de
forma a liberar a GIL ao realizar tarefas computacionalmente muito intensas, como compactaçã o ou cá lculos
de hash. Alé m disso, a GIL é sempre liberado nas operaçõ es de E/S.
A partir de Python 3.13, o GIL pode ser desabilitado usando a configuraçã o de construçã o --disable-gil.
Depois de construir Python com essa opçã o, o có digo deve ser executado com a opçã o -X gil=0 ou a variá vel
de ambiente PYTHON_GIL=0 deve estar definida. Esse recurso provê um desempenho melhor para aplicaçõ es
com mú ltiplas threads e torna mais fá cil o uso eficiente de CPUs com mú ltiplos nú cleos. Para mais detalhes,
veja PEP 703.
pyc baseado em hash
Um arquivo de cache em bytecode que usa hash ao invé s do tempo, no qual o arquivo de có digo-fonte foi
modificado pela ú ltima vez, para determinar a sua validade. Veja Invalidação de bytecode em cache.
hasheável
Um objeto é hasheável se tem um valor de hash que nunca muda durante seu ciclo de vida (precisa ter um
mé todo __hash__()) e pode ser comparado com outros objetos (precisa ter um mé todo __eq__()). Objetos
hasheá veis que sã o comparados como iguais devem ter o mesmo valor de hash.
A hasheabilidade faz com que um objeto possa ser usado como uma chave de dicioná rio e como um membro
de conjunto, pois estas estruturas de dados utilizam os valores de hash internamente.
A maioria dos objetos embutidos imutá veis do Python sã o hasheá veis; containers mutá veis (tais como listas
ou dicioná rios) nã o sã o; containers imutá veis (tais como tuplas e frozensets) sã o hasheá veis apenas se os seus
elementos sã o hasheá veis. Objetos que sã o instâ ncias de classes definidas pelo usuá rio sã o hasheá veis por
padrã o. Todos eles comparam de forma desigual (exceto entre si mesmos), e o seu valor hash é derivado a
partir do seu id().
IDLE
Um ambiente de desenvolvimento e aprendizado integrado para Python. idle é um editor bá sico e um ambiente
interpretador que vem junto com a distribuiçã o padrã o do Python.
imortal
Objetos imortais sã o um detalhe da implementaçã o do CPython introduzida na PEP 683.
Se um objeto é imortal, sua contagem de referências nunca é modificada e, portanto, nunca é desalocado en-
quanto o interpretador está em execuçã o. Por exemplo, True e None sã o imortais no CPython.
imutável
Um objeto que possui um valor fixo. Objetos imutá veis incluem nú meros, strings e tuplas. Estes objetos nã o
podem ser alterados. Um novo objeto deve ser criado se um valor diferente tiver de ser armazenado. Objetos
imutá veis tê m um papel importante em lugares onde um valor constante de hash seja necessá rio, como por
exemplo uma chave em um dicioná rio.
caminho de importação
Uma lista de localizaçõ es (ou entradas de caminho) que sã o buscadas pelo localizador baseado no caminho por
mó dulos para importar. Durante a importaçã o, esta lista de localizaçõ es usualmente vem a partir de [Link],
mas para subpacotes ela també m pode vir do atributo __path__ de pacotes-pai.
importação
O processo pelo qual o có digo Python em um mó dulo é disponibilizado para o có digo Python em outro mó dulo.
importador
Um objeto que localiza e carrega um mó dulo; Tanto um localizador e o objeto carregador.
interativo
Python tem um interpretador interativo, o que significa que você pode digitar instruçõ es e expressõ es no prompt
do interpretador, executá -los imediatamente e ver seus resultados. Apenas execute python sem argumentos
(possivelmente selecionando-o a partir do menu de aplicaçõ es de seu sistema operacional). O interpretador
interativo é uma maneira poderosa de testar novas ideias ou aprender mais sobre mó dulos e pacotes (lembre-se
do comando help(x)). Para saber mais sobre modo interativo, veja tut-interac.
interpretado
Python é uma linguagem interpretada, em oposiçã o à quelas que sã o compiladas, embora esta distinçã o possa
ser nebulosa devido à presença do compilador de bytecode. Isto significa que os arquivos-fontes podem ser
executados diretamente sem necessidade explícita de se criar um arquivo executá vel. Linguagens interpretadas
normalmente tê m um ciclo de desenvolvimento/depuraçã o mais curto que as linguagens compiladas, apesar
de seus programas geralmente serem executados mais lentamente. Veja també m interativo.
desligamento do interpretador
Quando solicitado para desligar, o interpretador Python entra em uma fase especial, onde ele gradualmente
libera todos os recursos alocados, tais como mó dulos e vá rias estruturas internas críticas. Ele també m faz
diversas chamadas para o coletor de lixo. Isto pode disparar a execuçã o de có digo em destrutores definidos
pelo usuá rio ou funçã o de retorno de referê ncia fraca. Có digo executado durante a fase de desligamento pode
encontrar diversas exceçõ es, pois os recursos que ele depende podem nã o funcionar mais (exemplos comuns
sã o os mó dulos de bibliotecas, ou os mecanismos de avisos).
A principal razã o para o interpretador desligar, é que o mó dulo __main__ ou o script sendo executado ter-
minou sua execuçã o.
iterável
Um objeto capaz de retornar seus membros um de cada vez. Exemplos de iterá veis incluem todos os tipos de
sequê ncia (tais como list, str e tuple) e alguns tipos de nã o-sequê ncia, como o dict, objetos arquivos,
alé m dos objetos de quaisquer classes que você definir com um mé todo __iter__() ou __getitem__()
que implementam a semâ ntica de sequência .
Iterá veis podem ser usados em um laço for e em vá rios outros lugares em que uma sequê ncia é necessá ria
(zip(), map(), …). Quando um objeto iterá vel é passado como argumento para a funçã o embutida iter(),
ela retorna um iterador para o objeto. Este iterador é adequado para se varrer todo o conjunto de valores. Ao
167
The Python Language Reference, Release 3.13.0
usar iterá veis, normalmente nã o é necessá rio chamar iter() ou lidar com os objetos iteradores em si. A
instruçã o for faz isso automaticamente para você , criando uma variá vel temporá ria para armazenar o iterador
durante a execuçã o do laço. Veja també m iterador, sequência, e gerador.
iterador
Um objeto que representa um fluxo de dados. Repetidas chamadas ao mé todo __next__() de um iterador
(ou passando o objeto para a funçã o embutida next()) vã o retornar itens sucessivos do fluxo. Quando nã o
houver mais dados disponíveis uma exceçã o StopIteration será levantada. Neste ponto, o objeto iterador
se esgotou e quaisquer chamadas subsequentes a seu mé todo __next__() vã o apenas levantar a exceçã o
StopIteration novamente. Iteradores precisam ter um mé todo __iter__() que retorne o objeto iterador
em si, de forma que todo iterador també m é iterá vel e pode ser usado na maioria dos lugares em que um iterá vel
é requerido. Uma notá vel exceçã o é có digo que tenta realizar passagens em mú ltiplas iteraçõ es. Um objeto
contê iner (como uma list) produz um novo iterador a cada vez que você passá -lo para a funçã o iter() ou
utilizá -lo em um laço for. Tentar isso com o mesmo iterador apenas iria retornar o mesmo objeto iterador
esgotado já utilizado na iteraçã o anterior, como se fosse um contê iner vazio.
Mais informaçõ es podem ser encontradas em typeiter.
Detalhes da implementação do CPython: O CPython nã o aplica consistentemente o requisito de que um
iterador defina __iter__(). E també m observe que o CPython com threads livres nã o garante a segurança
do thread das operaçõ es do iterador.
função chave
Uma funçã o chave ou funçã o colaçã o é um chamá vel que retorna um valor usado para ordenaçã o ou classifi-
caçã o. Por exemplo, [Link]() é usada para produzir uma chave de ordenaçã o que leva o locale
em consideraçã o para fins de ordenaçã o.
Uma porçã o de ferramentas no Python aceitam funçõ es chave para controlar como os elementos sã o orde-
nados ou agrupados. Algumas delas incluem min(), max(), sorted(), [Link](), [Link](),
[Link](), [Link]() e [Link]().
Há vá rias maneiras de se criar funçõ es chave. Por exemplo, o mé todo [Link]() pode servir como uma
funçã o chave para ordenaçõ es insensíveis à caixa. Alternativamente, uma funçã o chave ad-hoc pode ser cons-
truída a partir de uma expressã o lambda, como lambda r: (r[0], r[2]). Alé m disso, operator.
attrgetter(), [Link]() e [Link]() sã o trê s construtores de fun-
çã o chave. Consulte o guia de Ordenaçã o para ver exemplos de como criar e utilizar funçõ es chave.
argumento nomeado
Veja argumento.
lambda
Uma funçã o de linha anô nima consistindo de uma ú nica expressão, que é avaliada quando a funçã o é chamada.
A sintaxe para criar uma funçã o lambda é lambda [parameters]: expression
LBYL
Iniciais da expressã o em inglê s “look before you leap”, que significa algo como “olhe antes de pisar”. Este estilo
de codificaçã o testa as pré -condiçõ es explicitamente antes de fazer chamadas ou buscas. Este estilo contrasta
com a abordagem EAFP e é caracterizada pela presença de muitas instruçõ es if .
Em um ambiente multithread, a abordagem LBYL pode arriscar a introduçã o de uma condiçã o de corrida
entre “o olhar” e “o pisar”. Por exemplo, o có digo if key in mapping: return mapping[key] pode
falhar se outra thread remover key do mapping apó s o teste, mas antes da olhada. Esse problema pode ser
resolvido com travas ou usando a abordagem EAFP.
lista
Uma sequência embutida no Python. Apesar do seu nome, é mais pró ximo de um vetor em outras linguagens
do que uma lista encadeada, como o acesso aos elementos é da ordem O(1).
compreensão de lista
Uma maneira compacta de processar todos ou parte dos elementos de uma sequê ncia e retornar os resultados
em uma lista. result = ['{:#04x}'.format(x) for x in range(256) if x % 2 == 0] gera
uma lista de strings contendo nú meros hexadecimais (0x..) no intervalo de 0 a 255. A clá usula if é opcional.
Se omitida, todos os elementos no range(256) serã o processados.
carregador
Um objeto que carrega um mó dulo. Deve definir um mé todo chamado load_module(). Um carregador é
normalmente devolvido por um localizador. Veja també m:
• Localizadores e carregadores
• [Link]
• PEP 302
codificação da localidade
No Unix, é a codificaçã o da localidade do LC_CTYPE, que pode ser definida com locale.
setlocale(locale.LC_CTYPE, new_locale).
169
The Python Language Reference, Release 3.13.0
Algumas tuplas nomeadas sã o tipos embutidos (tal como os exemplos acima). Alternativamente, uma tupla
nomeada pode ser criada a partir de uma definiçã o de classe regular, que herde de tuple e que defina campos
nomeados. Tal classe pode ser escrita a mã o, ou ela pode ser criada herdando [Link] ou com
uma funçã o fá brica [Link](). As duas ú ltimas té cnicas també m adicionam alguns
mé todos extras, que podem nã o ser encontrados quando foi escrita manualmente, ou em tuplas nomeadas
embutidas.
espaço de nomes
O lugar em que uma variá vel é armazenada. Espaços de nomes sã o implementados como dicioná rios. Exis-
tem os espaços de nomes local, global e nativo, bem como espaços de nomes aninhados em objetos (em
mé todos). Espaços de nomes suportam modularidade ao prevenir conflitos de nomes. Por exemplo, as fun-
çõ es __builtin__.open() e [Link]() sã o diferenciadas por seus espaços de nomes. Espaços de nomes
també m auxiliam na legibilidade e na manutenibilidade ao torar mais claro quais mó dulos implementam uma
funçã o. Escrever [Link]() ou [Link](), por exemplo, deixa claro que estas funçõ es sã o
implementadas pelos mó dulos random e itertools respectivamente.
pacote de espaço de nomes
Um pacote da PEP 420 que serve apenas como container para sub pacotes. Pacotes de espaços de nomes
podem nã o ter representaçã o física, e especificamente nã o sã o como um pacote regular porque eles nã o tem
um arquivo __init__.py.
Veja també m módulo.
escopo aninhado
A habilidade de referir-se a uma variá vel em uma definiçã o de fechamento. Por exemplo, uma funçã o definida
dentro de outra pode referenciar variá veis da funçã o externa. Perceba que escopos aninhados por padrã o
funcionam apenas por referê ncia e nã o por atribuiçã o. Variá veis locais podem ler e escrever no escopo mais
interno. De forma similar, variá veis globais podem ler e escrever para o espaço de nomes global. O nonlocal
permite escrita para escopos externos.
classe estilo novo
Antigo nome para o tipo de classes agora usado para todos os objetos de classes. Em versõ es anteriores
do Python, apenas classes estilo podiam usar recursos novos e versá teis do Python, tais como __slots__,
descritores, propriedades, __getattribute__(), mé todos de classe, e mé todos está ticos.
objeto
Qualquer dado que tenha estado (atributos ou valores) e comportamento definidos (mé todos). També m a
ú ltima classe base de qualquer classe estilo novo.
escopo otimizado
Um escopo no qual os nomes das variá veis locais de destino sã o conhecidos de forma confiá vel pelo compi-
lador quando o có digo é compilado, permitindo a otimizaçã o do acesso de leitura e gravaçã o a esses nomes.
Os espaços de nomes locais para funçõ es, geradores, corrotinas, compreensõ es e expressõ es geradoras sã o
otimizados desta forma. Nota: a maioria das otimizaçõ es de interpretador sã o aplicadas a todos os escopos,
apenas aquelas que dependem de um conjunto conhecido de nomes de variá veis locais e nã o locais sã o restritas
a escopos otimizados.
pacote
Um módulo Python é capaz de conter submó dulos ou recursivamente, subpacotes. Tecnicamente, um pacote
é um mó dulo Python com um atributo __path__.
Veja també m pacote regular e pacote de espaço de nomes.
parâmetro
Uma entidade nomeada na definiçã o de uma função (ou mé todo) que específica um argumento (ou em alguns
casos, argumentos) que a funçã o pode receber. Existem cinco tipos de parâ metros:
• posicional-ou-nomeado: especifica um argumento que pode ser tanto posicional quanto nomeado. Esse
é o tipo padrã o de parâ metro, por exemplo foo e bar a seguir:
• somente-posicional: especifica um argumento que pode ser fornecido apenas por posiçã o. Parâ metros
somente-posicionais podem ser definidos incluindo o caractere / na lista de parâ metros da definiçã o da
funçã o apó s eles, por exemplo somentepos1 e somentepos2 a seguir:
• somente-nomeado: especifica um argumento que pode ser passado para a funçã o somente por nome.
Parâ metros somente-nomeados podem ser definidos com um simples parâ metro var-posicional ou um *
antes deles na lista de parâ metros na definiçã o da funçã o, por exemplo somente_nom1 and somente_nom2
a seguir:
• var-posicional: especifica que uma sequê ncia arbitrá ria de argumentos posicionais pode ser fornecida
(em adiçã o a qualquer argumento posicional já aceito por outros parâ metros). Tal parâ metro pode ser
definido colocando um * antes do nome do parâ metro, por exemplo args a seguir:
• var-nomeado: especifica que, arbitrariamente, muitos argumentos nomeados podem ser fornecidos (em
adiçã o a qualquer argumento nomeado já aceito por outros parâ metros). Tal parâ metro pode definido
colocando-se ** antes do nome, por exemplo kwargs no exemplo acima.
Parâ metros podem especificar tanto argumentos opcionais quanto obrigató rios, assim como valores padrã o
para alguns argumentos opcionais.
Veja o termo argumento no glossá rio, a pergunta sobre a diferença entre argumentos e parâ metros, a classe
[Link], a seçã o Definições de função e a PEP 362.
entrada de caminho
Um local ú nico no caminho de importação que o localizador baseado no caminho consulta para encontrar
mó dulos a serem importados.
localizador de entrada de caminho
Um localizador retornado por um chamá vel em sys.path_hooks (ou seja, um gancho de entrada de caminho)
que sabe como localizar os mó dulos entrada de caminho.
Veja [Link] para os mé todos que localizadores de entrada de caminho im-
plementam.
gancho de entrada de caminho
Um chamá vel na lista sys.path_hooks que retorna um localizador de entrada de caminho caso saiba como
localizar mó dulos em uma entrada de caminho específica.
171
The Python Language Reference, Release 3.13.0
for i in range(len(comida)):
print(comida[i])
nome qualificado
Um nome pontilhado (quando 2 termos sã o ligados por um ponto) que mostra o “path” do escopo global de um
mó dulo para uma classe, funçã o ou mé todo definido num determinado mó dulo, conforme definido pela PEP
3155. Para funçõ es e classes de nível superior, o nome qualificado é o mesmo que o nome do objeto:
>>> class C:
... class D:
... def metodo(self):
... pass
...
>>> C.__qualname__
'C'
>>> C.D.__qualname__
'C.D'
>>> [Link].__qualname__
'[Link]'
Quando usado para se referir a mó dulos, o nome totalmente qualificado significa todo o caminho pontilhado
para o mó dulo, incluindo quaisquer pacotes pai, por exemplo: [Link]:
contagem de referências
O nú mero de referê ncias a um objeto. Quando a contagem de referê ncias de um objeto cai para zero, ele é
desalocado. Alguns objetos sã o imortais e tê m contagens de referê ncias que nunca sã o modificadas e, portanto,
os objetos nunca sã o desalocados. A contagem de referê ncias geralmente nã o é visível para o có digo Python,
mas é um elemento-chave da implementaçã o do CPython. Os programadores podem chamar a funçã o sys.
getrefcount() para retornar a contagem de referê ncias para um objeto específico.
pacote regular
Um pacote tradicional, como um diretó rio contendo um arquivo __init__.py.
Veja també m pacote de espaço de nomes.
REPL
Um acrô nimo para “read–eval–print loop”, outro nome para o console interativo do interpretador.
__slots__
Uma declaraçã o dentro de uma classe que economiza memó ria pré -declarando espaço para atributos de ins-
tâ ncias, e eliminando dicioná rios de instâ ncias. Apesar de popular, a té cnica é um tanto quanto complicada
de acertar, e é melhor se for reservada para casos raros, onde existe uma grande quantidade de instâ ncias em
uma aplicaçã o onde a memó ria é crítica.
sequência
Um iterável com suporte para acesso eficiente a seus elementos atravé s de índices inteiros via mé todo es-
pecial __getitem__() e que define o mé todo __len__() que devolve o tamanho da sequê ncia. Alguns
tipos de sequê ncia embutidos sã o: list, str, tuple, e bytes. Note que dict també m tem suporte para
__getitem__() e __len__(), mas é considerado um mapeamento e nã o uma sequê ncia porque a busca
usa uma chave hasheável arbitrá ria em vez de inteiros.
A classe base abstrata [Link] define uma interface mais rica que vai alé m
de apenas __getitem__() e __len__(), adicionando count(), index(), __contains__(), e
__reversed__(). Tipos que implementam essa interface podem ser explicitamente registrados usando
register(). Para mais documentaçã o sobre mé todos de sequê ncias em geral, veja Operaçõ es comuns de
sequê ncias.
173
The Python Language Reference, Release 3.13.0
compreensão de conjunto
Uma maneira compacta de processar todos ou parte dos elementos em iterá vel e retornar um conjunto com
os resultados. results = {c for c in 'abracadabra' if c not in 'abc'} gera um conjunto de
strings {'r', 'd'}. Veja Sintaxe de criação de listas, conjuntos e dicionários.
despacho único
Uma forma de despacho de função genérica onde a implementaçã o é escolhida com base no tipo de um ú nico
argumento.
fatia
Um objeto geralmente contendo uma parte de uma sequência. Uma fatia é criada usando a notaçã o de subscrito
[] pode conter també m até dois pontos entre nú meros, como em variable_name[1:3:5]. A notaçã o de
suporte (subscrito) utiliza objetos slice internamente.
suavemente descontinuado
Uma API suavemente descontinuada nã o deve ser usada em có digo novo, mas é seguro para có digo já existente
usá -la. A API continua documentada e testada, mas nã o será aprimorada mais.
A descontinuaçã o suave, diferentemente da descontinuaçã o normal, nã o planeja remover a API e nã o emitirá
avisos.
Veja PEP 387: Descontinuaçã o suave.
método especial
Um mé todo que é chamado implicitamente pelo Python para executar uma certa operaçã o em um tipo, como
uma adiçã o por exemplo. Tais mé todos tem nomes iniciando e terminando com dois underscores. Mé todos
especiais estã o documentados em Nomes de métodos especiais.
instrução
Uma instruçã o é parte de uma suíte (um “bloco” de có digo). Uma instruçã o é ou uma expressão ou uma de
vá rias construçõ es com uma palavra reservada, tal como if , while ou for.
verificador de tipo estático
Uma ferramenta externa que lê o có digo Python e o analisa, procurando por problemas como tipos incorretos.
Consulte també m dicas de tipo e o mó dulo typing.
referência forte
Na API C do Python, uma referê ncia forte é uma referê ncia a um objeto que pertence ao có digo que conté m a
referê ncia. A referê ncia forte é obtida chamando Py_INCREF() quando a referê ncia é criada e liberada com
Py_DECREF() quando a referê ncia é excluída.
A funçã o Py_NewRef() pode ser usada para criar uma referê ncia forte para um objeto. Normalmente, a
funçã o Py_DECREF() deve ser chamada na referê ncia forte antes de sair do escopo da referê ncia forte, para
evitar o vazamento de uma referê ncia.
Veja també m referência emprestada.
codificador de texto
Uma string em Python é uma sequê ncia de pontos de có digo Unicode (no intervalo U+0000–U+10FFFF). Para
armazenar ou transferir uma string, ela precisa ser serializada como uma sequê ncia de bytes.
A serializaçã o de uma string em uma sequê ncia de bytes é conhecida como “codificaçã o” e a recriaçã o da string
a partir de uma sequê ncia de bytes é conhecida como “decodificaçã o”.
Há uma variedade de diferentes serializaçõ es de texto codecs, que sã o coletivamente chamadas de “codificaçõ es
de texto”.
arquivo texto
Um objeto arquivo apto a ler e escrever objetos str. Geralmente, um arquivo texto, na verdade, acessa um
fluxo de dados de bytes e captura o codificador de texto automaticamente. Exemplos de arquivos texto sã o:
arquivos abertos em modo texto ('r' or 'w'), [Link], [Link], e instâ ncias de [Link].
Veja també m arquivo binário para um objeto arquivo apto a ler e escrever objetos byte ou similar.
aspas triplas
Uma string que está definida com trê s ocorrê ncias de aspas duplas (”) ou apó strofos (‘). Enquanto elas nã o
fornecem nenhuma funcionalidade nã o disponível com strings de aspas simples, elas sã o ú teis para inú meras
razõ es. Elas permitem que você inclua aspas simples e duplas nã o escapadas dentro de uma string, e elas
podem utilizar mú ltiplas linhas sem o uso de caractere de continuaçã o, fazendo-as especialmente ú teis quando
escrevemos documentaçã o em docstrings.
tipo
O tipo de um objeto Python determina qual classe de objeto ele é ; cada objeto tem um tipo. Um tipo de objeto
é acessível pelo atributo __class__ ou pode ser recuperado com type(obj).
apelido de tipo
Um sinô nimo para um tipo, criado atravé s da atribuiçã o do tipo para um identificador.
Apelidos de tipo sã o ú teis para simplificar dicas de tipo. Por exemplo:
def remove_tons_de_cinza(
cores: list[tuple[int, int, int]]) -> list[tuple[int, int, int]]:
pass
class C:
campo: 'anotação'
Anotaçõ es de variá veis sã o normalmente usadas para dicas de tipo: por exemplo, espera-se que esta variá vel
receba valores do tipo int:
contagem: int = 0
175
The Python Language Reference, Release 3.13.0
máquina virtual
Um computador definido inteiramente em software. A má quina virtual de Python executa o bytecode emitido
pelo compilador de bytecode.
Zen do Python
Lista de princípios de projeto e filosofias do Python que sã o ú teis para a compreensã o e uso da linguagem. A
lista é exibida quando se digita “import this” no console interativo.
Esses documentos sã o gerados a partir de reStructuredText pelo Sphinx, um processador de documentos especifica-
mente escrito para documentaçã o Python.
O desenvolvimento da documentaçã o e de suas ferramentas é um esforço totalmente voluntá rio, como Python em
si. Se você quer contribuir, por favor dê uma olhada na pá gina reporting-bugs para informaçõ es sobre como fazer.
Novos voluntá rios sã o sempre bem-vindos!
Agradecimentos especiais para:
• Fred L. Drake, Jr., o criador do primeiro conjunto de ferramentas para documentar Python e escritor de boa
parte do conteú do;
• O projeto Docutils por criar reStructuredText e o pacote Docutils;
• Fredrik Lundh, pelo seu projeto de referê ncia alternativa em Python, do qual Sphinx pegou muitas boas ideias.
177
The Python Language Reference, Release 3.13.0
História e Licença
® Nota
179
The Python Language Reference, Release 3.13.0
Compatível com a GPL nã o significa que estamos distribuindo Python sob a GPL. Todas as licenças do Python,
ao contrá rio da GPL, permitem distribuir uma versã o modificada sem fazer alteraçõ es em có digo aberto. As
licenças compatíveis com a GPL possibilitam combinar o Python com outro software lançado sob a GPL; os
outros nã o.
Graças aos muitos voluntá rios externos que trabalharam sob a direçã o de Guido para tornar esses lançamentos pos-
síveis.
2. Subject to the terms and conditions of this License Agreement, PSF hereby
grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
analyze, test, perform and/or display publicly, prepare derivative works,
distribute, and otherwise use Python 3.13.0 alone or in any derivative
version, provided, however, that PSF's License Agreement and PSF's notice of
copyright, i.e., "Copyright © 2001-2024 Python Software Foundation; All Rights
Reserved" are retained in Python 3.13.0 alone or in any derivative version
prepared by Licensee.
5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 3.13.0
FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF
MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 3.13.0, OR ANY DERIVATIVE
THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
2. Subject to the terms and conditions of this BeOpen Python License Agreement,
BeOpen hereby grants Licensee a non-exclusive, royalty-free, world-wide license
to reproduce, analyze, test, perform and/or display publicly, prepare derivative
works, distribute, and otherwise use the Software alone or in any derivative
version, provided, however, that the BeOpen Python License is retained in the
Software, alone or in any derivative version prepared by Licensee.
4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR
ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF USING,
MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF
ADVISED OF THE POSSIBILITY THEREOF.
4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" basis. CNRI
MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE,
BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY
OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF
PYTHON 1.6.1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 1.6.1 FOR
ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF
MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, OR ANY DERIVATIVE
THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted, provided that
the above copyright notice appear in all copies and that both that copyright
notice and this permission notice appear in supporting documentation, and that
the name of Stichting Mathematisch Centrum or CWI not be used in advertising or
publicity pertaining to distribution of the software without specific, written
prior permission.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
C.3.2 Soquetes
O mó dulo socket usa as funçõ es getaddrinfo() e getnameinfo(), que sã o codificadas em arquivos de origem
separados do Projeto WIDE, [Link]
THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
(continua na pró xima pá gina)
Permission to use, copy, modify, and distribute this Python software and
its associated documentation for any purpose without fee is hereby
granted, provided that the above copyright notice appears in all copies,
and that both that copyright notice and this permission notice appear in
supporting documentation, and that the name of neither Automatrix,
Bioreason or Mojam Media be used in advertising or publicity pertaining to
distribution of the software without specific, written prior permission.
SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT-
ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR
BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
OF THIS SOFTWARE.
C.3.8 test_epoll
O mó dulo test.test_epoll conté m o seguinte aviso:
Copyright (c) 2001-2006 Twisted Matrix Laboratories.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
C.3.10 SipHash24
O arquivo Python/pyhash.c conté m a implementaçã o de Marek Majkowski do algoritmo SipHash24 de Dan
Bernstein. Conté m a seguinte nota:
<MIT License>
Copyright (c) 2013 Marek Majkowski <marek@[Link]>
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
</MIT License>
Original location:
[Link]
/****************************************************************
*
* The author of this software is David M. Gay.
*
* Copyright (c) 1991, 2000, 2001 by Lucent Technologies.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose without fee is hereby granted, provided that this entire notice
* is included in all copies of any software which is or includes a copy
* or modification of this software and in all copies of the supporting
* documentation for such software.
*
* THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
* WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY
* REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
* OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
*
***************************************************************/
C.3.12 OpenSSL
Os mó dulos hashlib, posix e ssl usam a biblioteca OpenSSL para desempenho adicional se forem disponibi-
lizados pelo sistema operacional. Alé m disso, os instaladores do Windows e do Mac OS X para Python podem
incluir uma có pia das bibliotecas do OpenSSL, portanto incluímos uma có pia da licença do OpenSSL aqui: Para o
lançamento do OpenSSL 3.0, e lançamentos posteriores derivados deste, se aplica a Apache License v2:
Apache License
Version 2.0, January 2004
[Link]
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
(continua na pró xima pá gina)
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
C.3.13 expat
A extensã o pyexpat é construída usando uma có pia incluída das fontes de expatriadas, a menos que a compilaçã o
esteja configurada --with-system-expat:
Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
and Clark Cooper
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
C.3.14 libffi
A extensã o C _ctypes subjacente ao mó dulo ctypes é construída usando uma có pia incluída das fontes do libffi,
a menos que a construçã o esteja configurada com --with-system-libffi:
Copyright (c) 1996-2008 Red Hat, Inc and others.
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
C.3.15 zlib
A extensã o zlib é construída usando uma có pia incluída das fontes zlib se a versã o do zlib encontrada no sistema
for muito antiga para ser usada na construçã o:
Copyright (C) 1995-2011 Jean-loup Gailly and Mark Adler
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
C.3.16 cfuhash
A implementaçã o da tabela de hash usada pelo tracemalloc é baseada no projeto cfuhash:
C.3.17 libmpdec
A extensã o C _decimal subjacente ao mó dulo decimal é construída usando uma có pia incluída da biblioteca
libmpdec, a menos que a construçã o esteja configurada com --with-system-libmpdec:
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
C.3.19 mimalloc
Licença MIT:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
C.3.20 asyncio
Partes do mó dulo asyncio sã o incorporadas do uvloop 0.16, que é distribuído sob a licença MIT:
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Direitos autorais
199
The Python Language Reference, Release 3.13.0
201
The Python Language Reference, Release 3.13.0
202 Índice
The Python Language Reference, Release 3.13.0
Índice 203
The Python Language Reference, Release 3.13.0
204 Índice
The Python Language Reference, Release 3.13.0
Índice 205
The Python Language Reference, Release 3.13.0
206 Índice
The Python Language Reference, Release 3.13.0
[Link] método, 25
módulo, 21 encadeamento
declaração de codificação (arquivo fonte), 6 comparações, 94
decorador, 163 exceção, 107
def entrada, 140
instrução, 130 entrada de caminho, 171
default entrada padrão, 139
parâmetro value, 130 erros, 65
definição escopo, 61, 62
classe, 106, 132 escopo aninhado, 170
função, 106, 130 escopo otimizado, 170
definida por usuário escrita
função, 22 gravação;valores, 101
função chamada, 91 espaço, 7
método, 23 espaço de nomes, 61, 170
del global, 22
instrução, 37, 106 módulo, 25
delimitadores, 16 pacote, 68
depuração espaço em branco inicial, 7
asserções, 105 especial
descritor, 163 atributo, 18
desempacotamento atributo, generic, 18
dicionário, 82 método, 174
em chamadas de função, 90 especificação do módulo, 169
Iterável, 98 estrutura da linha, 5
desfiguração eval
nome, 80 função embutida, 111, 140
desligamento do interpretador, 167 exc_info (in module sys), 35
deslocamento exceção, 65, 107
operação, 93 AssertionError, 105
despacho único, 174 AttributeError, 88
destrutor, 37, 102 encadeamento, 107
desvinculação GeneratorExit, 85, 87
nome, 106 handler, 35
dica de tipo, 175 ImportError, 109
dicionário, 163 levantamento, 107
compreensões, 82 NameError, 80
objeto, 21, 28, 40, 82, 88, 103 StopAsyncIteration, 87
sintaxe de criação, 82 StopIteration, 84, 106
divisão, 92 TypeError, 92
divisão pelo piso, 165 ValueError, 93
divmod ZeroDivisionError, 92
função embutida, 53 except
docstring, 132, 163 palavra reservada, 117
except_star
E palavra reservada, 118
e exclusão
em literal númerico, 15 alvo, 106
EAFP, 164 alvo lista, 106
elif atributo, 106
palavra reservada, 116 exclusivo
Ellipsis or, 93
objeto, 19 exec
else função embutida, 111
dangling, 116 execução
expressão condicional, 98 quadro, 61, 132
palavra reservada, 108, 116, 117, 119 restrita, 64
embutido stack, 35
Índice 207
The Python Language Reference, Release 3.13.0
208 Índice
The Python Language Reference, Release 3.13.0
caminho, 70 import
importação, 70 instrução, 109
meta, 70 importação, 167
ganchos de caminho, 70 ganchos, 70
ganchos de importação, 70 instrução, 25
GeneratorExit importador, 167
exceção, 85, 87 ImportError
generic exceção, 109
especial atributo, 18 imutável, 167
gerador, 165 dados tipo, 80
expressão, 83 objeto, 20, 80, 82
função, 24, 83, 106 in
iterador, 24, 106 operador, 96
objeto, 33, 83, 84 palavra reservada, 116
gerador assíncrono, 160 inclusive
função, 24 or, 93
iterador assíncrono, 24 indentação, 7
objeto, 86 index operation, 20
gerenciador de contexto, 55, 162 indices() (método slice), 36
gerenciador de contexto assíncrono, 160 inheritance, 132
GIL, 166 início (atributo de objeto fatia), 36
global instância
espaço de nomes, 22 chamada, 50, 91
instrução, 106, 111 classe, 30
nome vinculação; ligação, 111 objeto, 28, 30, 91
gramática, 4 instância de classe
gravação;valores atributo, 30
escrita, 101 atributo atribuição, 30
guard, 123 chamada, 91
objeto, 28, 30, 91
H instrução, 174
handler assert, 105
exceção, 35 async def, 133
hash async for, 133
função embutida, 40 async with, 134
hasheável, 82, 166 atribuição, 20, 102
hierarchy atribuição, anotada, 104
tipo, 18 aumentada, atribuição, 104
break, 108, 116, 119
I classe, 132
id compound, 115
função embutida, 17 continue, 108, 116, 119
identidade def, 130
teste, 96 del, 37, 106
identificador, 8, 80 expressão, 101
identity of an object, 17 for, 108, 116
IDLE, 167 future, 110
if global, 106, 111
em compreensões, 81 if, 116
expressão condicional, 98 import, 109
instrução, 116 importação, 25
palavra reservada, 121 laço, 108, 116
immutable object, 17 match, 121
immutable sequence nonlocal, 112
objeto, 20 pass, 105
immutable types raise, 107
subclassing, 37 return, 106, 119
imortal, 167 simples, 101
Índice 209
The Python Language Reference, Release 3.13.0
210 Índice
The Python Language Reference, Release 3.13.0
Índice 211
The Python Language Reference, Release 3.13.0
212 Índice
The Python Language Reference, Release 3.13.0
Índice 213
The Python Language Reference, Release 3.13.0
214 Índice
The Python Language Reference, Release 3.13.0
V
valor, 82
value
default parâmetro, 130
value of an object, 17
ValueError
exceção, 93
variável
livre, 62
variável de ambiente
PYTHON_GIL, 166
PYTHONHASHSEED, 40
PYTHONNODEBUGRANGES, 33
PYTHONPATH, 75
variável de classe, 161
variável de clausura, 162
variável de contexto, 162
variável livre, 165
vazia
lista, 82
tupla, 81
vazio
tupla, 20
Índice 215